这是代码片段:
FILE *fp;
fp = fopen(argv[2], "r"); // the input file
while (!(feof(fp))) {
char c;
int i = 0;
char string[101]; // max string length is 100. last spot reserved for '\0'
string[100] = '\0';
while ((c = fgetc(fp)) != ' ' && i < 100) {
string[i] = c;
i++;
}
printf("%s\n",string);
}
fclose(fp);
这只是我遇到的一个更大问题的一个例子,但我觉得如果我理解为什么会发生这种情况。
“argv[2]”文件的内容如下:
this is an input file
我得到的总体输出是:
this
isis
anis
input
file
�����������������������������������������������������������������������������������������������
...与我正在寻找的相反:
this
is
an
input
file
我很困惑为什么该字符串似乎不是一个新字符串(即,为什么该字符串第二次是“is”,后跟最后一个字符串的剩余两个字符,这也恰好是“is”将“isis”组合在一起)。为什么最后两个没有发生同样的事情?为什么“file”不打印为“filet”?非常困惑。
总的来说,我只是想得到我想要的输出。关于我为什么不这样做的任何建议?为什么字符串被覆盖而不是程序为每次迭代创建一个新字符串?
最佳答案
您需要在字符串末尾添加一个空终止符。退出 while 循环后,设置 string[i] = '\0'
。做一些研究来了解 C 中的字符串和空终止符 ('\0'
);这是你需要学习的东西。
关于string - 为什么我的C程序打印这样?我不明白字符串是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349876/