打印出我已读入数组的文件后,我得到了一些额外的垃圾字符。
这是我的代码
fp = fopen("load.txt", "r");
if (fp == NULL)
{
perror("Exiting, an error occured while opening\n");
exit(EXIT_FAILURE);
}
while((ch = fgetc(fp)) != EOF)
{
load[i++] = ch;
}
fclose(fp);
for(i = 0; i < 100; ++i)
{
printf("%c", load[i]);
}
示例输出
The quick brown fox jumped over the lazy dog.
���������0LãUˇ���∞4
����������@LãUˇ��������������
注意句子后的所有垃圾?我不确定是什么原因造成的。
提前感谢您提供任何帮助
答案 0 :(得分:2)
那么,当您在for
循环中打印100个字符时,您期望发生什么?
在i = 0
循环之前添加while
。
在load[i] = 0
循环后添加while
。
将for
循环替换为printf("%s",load)
。
此外,假设load
数组在同一函数中静态分配:
while
扩展&& i < sizeof(load)-1
循环的条件。答案 1 :(得分:1)
您正在load[i]
从i
到0
打印99
的所有值,但除了从文件读取的数据结束之外,似乎永远不会分配给{{1}} 。这意味着数组的其余部分具有垃圾数据,这是您在打印时看到的内容。
要解决此问题,请在从文件读取的数据末尾添加终止符号,并在出现后中断for循环。
答案 2 :(得分:0)
如果你坚持要保持你的for循环:
for(int j = 0; j < i; ++j) //stop at the EOF you got earlier
{
printf("%c", load[i]);
}
答案 3 :(得分:-1)
在C中,所有字符串都有一个空字符串终止符,\0
字符。由于您已经加载了最后一个字符i
,因此您可以:
if (i >= 100) i = 100; // bounding checks
load[i] = '\0';
对于打印,您必须:
int pos;
while ( pos = 0; pos < i; ++pos)
printf("%c", load[pos]);
或者...
printf("%s", load);