【发布时间】:2013-11-18 10:21:16
【问题描述】:
在我的项目中,我遇到了strncpy 这些奇怪的问题。我检查了reference。但是函数strncpy 的行为让我很困惑。
在这个function,当它运行到strncpy(subs,target,term_len);
虽然我不知道为什么字符串后面有两个空格?!!!这是一个大项目,我不能在这里粘贴所有代码。以下只是一个片段。我所有的代码都是here。
char* subs = new char[len];
while(top<=bottom){
char* term = m_strTermTable[bottom].strterm;
int term_len = strlen(term);
memset(subs,'\0',len);
strncpy(subs,target,term_len);
int subs_len = strlen(subs);
int re = strcmp(subs,term);
if (re == 0)
{
return term_len;
}
bottom--;
}
delete[] subs;
【问题讨论】:
-
如果这是c++,你为什么不直接使用
std::strings? -
strncpy not 总是添加空终止符。这是一个特别愚蠢的功能,我会避免使用。
-
您检查过
term_len的值吗?会不会是term_len比len大? -
-
我在 SO 上看到的 每次使用
strncpy都是毫无意义的。这些用途通常只是用数据损坏替换缓冲区溢出,就像这个一样。 极少种情况适合strncpy;没有经验的程序员没有充分的理由使用它。
标签: c++ visual-c++ visual-studio-debugging