c++ - FILE *f 在 C++ 中初始化为什么?

标签 c++ visual-studio-2010

我想要选择是否将结果写入文件,所以我会有一个文件名 fnm,如果它是空白的 ("") 我不会创建/写入文件。所以基本上我有:

FILE* f;

if(fnm!=""){
//open file for writing
    f = fopen(fnm.c_str(), "a+");
}

/*do some other stuff*/

for(int idx=0;idx<n;idx++){
    printf("%d\t\t%d\t\t%d\n", k, idx, A[idx]);
    if(f!=NULL){
        fprintf(f,"%d\t\t%d\t\t%d\n", k, idx, A[idx]);
    }
}

if(f!=NULL){
    //close the file
    fclose(f);
}

现在,f 在声明 FILE* f; 时实际上并没有初始化为 NULL。如果我手动初始化 FILE* f=NULL;,它工作正常,所以这主要是我对默认初始化感到好奇。我之前用谷歌搜索过,但答案是针对 C 的,他们说它初始化为 NULL

最佳答案

视情况而定。

如果您在任何函数外定义f然后它将被初始化为一个空指针。

如果你在一个函数中定义f,那么它会被初始化为垃圾。

在 C 和 C++ 中也是如此。

关于c++ - FILE *f 在 C++ 中初始化为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619520/

相关文章:

c# - Marshal.StructureToPtr 使 Visual Studio 崩溃

c - Visual Studio 2010 链接器 [C]

c++ - 为什么我的程序在调试器中运行良好时会崩溃,但在 VS 2010 C++ 中不使用调试器运行时会崩溃?

c++ - Opengl纹理圆柱体问题

c++ - 非内联构造函数中的默认参数

c++ - 如何将TYPED_TEST中的一些测试用例标记为预期失败?

C++ 在虚方法中使用捕获 lambda

c# - WPF 数据绑定(bind)到另一个类

c# - 在属性构造函数中使用可选参数时,属性参数必须是常量错误

表示库中项目的类的 c++ 派生类