C编程,从文件读取并加载到数组中

时间:2014-04-29 17:31:51

标签: c arrays file input

打印出我已读入数组的文件后,我得到了一些额外的垃圾字符。

这是我的代码

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ˇ��������������

注意句子后的所有垃圾?我不确定是什么原因造成的。

提前感谢您提供任何帮助

4 个答案:

答案 0 :(得分:2)

那么,当您在for循环中打印100个字符时,您期望发生什么?

  1. i = 0循环之前添加while

  2. load[i] = 0循环后添加while

  3. for循环替换为printf("%s",load)

  4. 此外,假设load数组在同一函数中静态分配:

    • 使用while扩展&& i < sizeof(load)-1循环的条件。

答案 1 :(得分:1)

您正在load[i]i0打印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);