编译器随机执行if语句

标签 c gcc file-io

我有以下 C 程序:

#include <stdio.h>

int main()
{
    char *filename;
    FILE *fp1, *fp2;
    int i, number;

    fp1=fopen("TEST", "w");

    for(i=10; i<=100; i+=10)
    {
        putw(i, fp1);
    }

    fclose(fp1);

    printf("\nInput filename\n");

open_file:

    scanf("%s", filename);


    if((fp2=fopen(filename, "r"))==NULL)
    {
        printf("Cannot open the file.\n");
        printf("Type file name again.\n");
        goto open_file;
    }

    else
    {
        for(i=1; i<=20; i++)
        {
            number=getw(fp2);

            if(feof(fp2))
            {
                printf("\nRan out of data\n");
                break;
            }

            else
            {
                printf("%d\n", number);
            }
        }

        fclose(fp2);
    }

    return 0;
} 

我为 scanf("%s", filename); 输入了 TEST。但是这个语句 if((fp2=fopen(filename, "r"))==NULL) 总是在执行,我的编译器正在打印 Cannot open the file 再次随机输入文件名。这是一个 goto 语句。所以它应该等待另一个输入。但事实并非如此。哪里有问题??

最佳答案

char *filename; 是一个指针,没有为其分配内存。

尝试

char filename[100]; 并提供有效的文件名。

关于编译器随机执行if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22551440/

相关文章:

c - -SUID- 无法以 root 身份运行 "-rwsr-xr-x"文件

c++ - Open MP:SIMD循环中的SIMD兼容功能?

c++ - 模板基类继承是否有另一种解决方法?

ASP.NET-使用 System.IO.File.Delete() 从 wwwroot 内的目录中删除文件?

c - 手册 "encryption"只输出0到文件

c - 防止 gcc 内联所有函数

c - 弄清楚 Unix 中的写入

c - 指向结构体的指针的二维数组(动态)

c - 使用 __attribute__ ((weak)) 会导致警告 "redundant redeclaration of xxx",有什么办法可以避免?

c - 从 C 程序中保存大量数值数据 (GB) 的最佳格式是什么?