Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件*f初始化为C++中的什么?_C++_Visual Studio 2010 - Fatal编程技术网

文件*f初始化为C++中的什么?

文件*f初始化为C++中的什么?,c++,visual-studio-2010,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

我想选择是否将结果写入文件,因此我会有一个文件名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;时,f实际上并没有初始化为NULL;。如果我手动初始化它,它可以正常工作。FILE*f=NULL;,所以我对默认的初始化很好奇。我之前在谷歌上搜索过它,但答案是C,他们说它初始化为NULL。

该值未定义;必须在初始化代码中将其显式初始化为NULL。在指针中找到的任何值都可能是用于存储该指针的内存上一次拥有的任意值的结果。

未初始化的非静态局部变量的值是不确定的,使用它们将导致错误。所以不要使用未初始化的局部变量。始终直接在定义中或在单独的赋值中初始化它们。

视情况而定

如果在任何函数外定义f,则它将被初始化为空指针

如果在函数中定义f,那么它将被初始化为垃圾


C和C++中都是一样的。

不妨把它写成文件*f= fOpenFn.c*STR,a+;如果文件名为空字符串,fopen将失败并返回Null。您可能应该查阅VS2010文档以找到访问文件的最佳方式,除非您有充分的理由这样做。此外,您还回答了您自己的问题,因为C++是C的扩展。请在任何情况下建议显式初始化。