gpt4 book ai didi

c++ - 函数 strncpy 的奇怪行为?

转载 作者:行者123 更新时间:2023-11-30 04:11:53 25 4
gpt4 key购买 nike

在我的项目中,我用strncpy遇到了这些奇怪的问题。我检查了 reference .但是函数 strncpy 的行为让我很困惑。在这个function , 当它运行到 strncpy(subs,target,term_len);

status of variables

虽然我不知道为什么字符串后面有两个空格?!!!这是一个大项目,我不能把所有的代码都贴在这里。以下只是一个片段。我所有的代码都是 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;

最佳答案

strncpy如果源字符串长于最大字符数(即在您的情况下,如果 strlen(target) > term_len 成立),则不会添加终止空字节。如果发生这种情况,subs 可能会或可能不会正确终止。

尝试将您的 strncpy 调用更改为

strncpy(subs, target, term_len-1);

因此,即使 strncpy 没有添加终止空字节,subs 仍然会由于之前的 memset 而正确地以 null 终止> 打电话。

现在,话虽这么说 - 你可以避免使用一个单独的 subs 缓冲区(如果控制流到达 return 语句,无论如何都会泄漏)只需使用strncmp

while(top<=bottom) {
char* term = m_strTermTable[bottom].strterm;
int term_len = strlen(term);
if (strncmp(term, target, term_len) == 0) {
return term_len;
}
bottom--;
}

关于c++ - 函数 strncpy 的奇怪行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20045358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com