我使用VS 2010作为我的IDE,此代码在fgets作为puts参数调用的那一行之前都可以正常工作。它可以将文件中的数字很好地记录下来,但也可以打印出一些令人讨厌的垃圾。也许我在某处缺少\ 0,不知道。其他人在其他编译器(如mingw或gcc)上进行了尝试,并且工作正常。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *a, n, i;
    char str[512];
    FILE *f;
    printf("Insert array size: ");
    scanf("%d", &n);
    if(n <= 0)
    {
        printf("%d is not an allowed value!\n", n);
        return 1;
    }
    a = (int*)malloc(n * sizeof(int));
    if(a == NULL)
        return 2;
    putchar('\n');
    f = fopen("myarray.txt", "r+");
    if(f == NULL)
        return 3;
    for(i = 0; i < n; ++i)
    {
        printf("Insert %d. element of the array: ", i + 1);
        scanf("%d", &a[i]);
        fprintf(f, "%d ", a[i]);
    }
    putchar('\n');
    puts(fgets(str, 512, f));
    free(a);
    fclose(f);
    return 0;
}

最佳答案

在代码中调用fgets的位置,文件指针应位于文件的末尾。

因此,fgets应该返回给您NULL指针,因为它在读取任何字符之前会命中EOF。

因此,您要将NULL指针传递给puts

关于c - C-fgets()产生乱码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13998734/

10-16 11:31