C 为什么一个不相关/未声明的变量会影响另一个变量的输出?



当字符数组substring[#]设置为[64]时,文件会输出一个附加字符。附加字符因每次编译而异。 有时es?,有时esx等等。

如果我将[64]更改为任何其他数字(至少是我尝试过的数字:65、256,1.),它会正确输出为es.

更奇怪的是,如果我将未使用/未声明的字符数组char newString[64]保留在此文件中,即使使用 64,它也会输出正确的子字符串es

  1. 看似任意的 64 大小如何影响输出?
  2. 一个完全不相关的字符数组(newString)如何影响另一个字符数组的输出方式?

.

int main () {
char string[64];    
char newString[64];
char substring[64];
fgets(string,64,stdin); 
strncpy(substring, string+1, 1);
printf("%sn", substring);
return 0;
}

问题是,strncpy() 不会复制null终止符,因为你要求它不要这样做。

使用strncpy()既安全又危险,因为它不会总是复制null终止符,将其用于单个字节也是没有意义的,而是这样做

substring[0] = string[1];
substring[1] = '';

它应该起作用。

你应该阅读手册页strncpy(3)来理解我的意思,如果你每次都仔细阅读手册,你会在更短的时间内成为一个更好的程序员。

相关内容

  • 没有找到相关文章

最新更新