当字符数组substring[#]
设置为[64]
时,文件会输出一个附加字符。附加字符随每次编译而变化。有时为es?
,有时为esx
等。
如果我将[64]
更改为任何其他号码(至少是我尝试过的号码:65,256,1 ..),则会正确输出es
。
更奇怪的是,如果我将未使用/未声明的字符数组char newString[64]
留在此文件中,即使使用64,它也会输出正确的子字符串es
。
newString
)如何影响另一个字符数组的输出?
int main () {
char string[64];
char newString[64];
char substring[64];
fgets(string,64,stdin);
strncpy(substring, string+1, 1);
printf("%s\n", substring);
return 0;
}
答案 0 :(得分:3)
问题是,strncpy()不会复制null
终止符,因为您已经要求不这样做。
同时使用strncpy()
既安全又危险,因为它不会始终复制null
终止符,同时使用单个字节也无意义,而是执行此操作
substring[0] = string[1];
substring[1] = '\0';
它会起作用。
如果您在较短时间内成为更好的程序员时仔细阅读本手册,则应阅读手册页strncpy(3)以正确理解我的意思。