【发布时间】:2016-08-05 08:44:34
【问题描述】:
这是我的程序:
#include <stdio.h>
int tokenCopy(char* dest, const char* src, int destSize)
{
int i;
for (i = 0; i < destSize-1; i++) {
if (src[i] != '\0' && src[i] != EOF && src[i] != ' '){
dest[i] = src[i];
} else {
dest[i] = '\0';
break;
}
}
return i;
}
int main()
{
char buff[5];
int n = tokenCopy(buff, "This is a string", 5);
printf("%d '%s'\n", n, buff);
}
我试图用它来复制从一个字符串中提取的字符串到另一个字符串。有了这个测试用例,我应该得到4 'This'。但我得到了4 'This�'。我知道我的循环以某种方式终止了一个索引,但我不知道如何修复它。
我知道有内置函数可以帮助我解决这种情况,但我真的想找出问题所在,谢谢
【问题讨论】:
-
@iwin:这行不通。如果目标缓冲区是 50 字节长,我们将一个 12 字符的字符串复制到其中,则索引 12 到 50 的字符将是垃圾