致命错误:glibc。尝试将字符放入文件中

问题描述 投票:0回答:1

我试图通过提示用户输入四个字符来在文件中放置并获取+打印四个字符。但是,出现错误(致命错误:glibc 检测到无效的 stdio 句柄)。

调试后发现故障出在线路

fputc(c[3], putc)
。第四次提示用户后,无法将第四个字符 c[3] 放入文件中。

请帮助我理解。

这是我的代码:

    FILE* putc = fopen("test3.txt", "w");

    if(putc == NULL)
    {
        return 1;
    }

    char c[4];

    for(int i = 0; i < 4; i++)
    {
        printf("char: ");
        scanf("%s", &c[i]);
        fputc(c[i], putc);
    }


    fclose(putc);

    FILE* getc = fopen("test3.txt", "r");

    if(getc == NULL)
    {
        return 1;
    }

    char abc;

    while ((abc = fgetc(getc)) != EOF)
    {
        printf("%c", abc);
    }
    printf("\n");

    fclose(getc);
c file memory char
1个回答
0
投票

使用命令

$ gcc -Wall -o foo foo.c
编译的 gcc 版本“Ubuntu 11.4.0-1ubuntu1~22.04”没有遇到错误。你有什么版本的 gcc,你如何调用编译器/链接器?

顺便说一句,我建议为 putc 和 getc 选择不同的变量名,它们都是 C 标准库函数。 来自

man putc

putc() 与 fputc() 等效,只是它可以实现为 多次评估流的宏。

来自

man getc

getc() 与 fgetc() 等效,只是它可以实现为 多次评估流的宏。

另外,我不会使用 scanf();这通常是一个“坏主意”。请参阅此更安全替代方案的说明

© www.soinside.com 2019 - 2024. All rights reserved.