我正在尝试编写一个c ++程序来从文件中读取一些数据。我的代码是:

void read_file(const char *foldername) {
    FILE *fp;
    char c;
    const char *filename;
    filename=strcat((char *)foldername, "L1_matrix");
    fp=fopen(filename, "w+");
    if(fp)
        while (fgets((char *)c,512,fp))
            printf("%s", c);
}

int main() {
    read_file("A:\\Project\\Root\\event_1\\");
    getchar();
}


我想读取多个文件,例如L2_matrix等。

但是在这种情况下,我遇到了一些错误,例如:


访问冲突位置错误(我在文件名中发现此错误)
变量“ c”被使用而未初始化。


如果有人可以帮助,那将是很大的帮助。

最佳答案

strcat((char *)foldername, "L1_matrix");


strcat接受一个in-out参数,该参数指向一个缓冲区,该缓冲区包含一个以0结尾的字符串,并且足以存储结果,并具有一个指向字符串的指针。

您给它foldername并通过强制转换确保它实际上指向可修改的缓冲区。
别说谎

同样,您的第二个错误,但强制转换更严重:

fgets((char *)c,512,fp)


这将读取未初始化的变量c,从而发出“未初始化”警告,即UB。
接下来,您将其强制转换为char*,但请不要担心:在现代台式机上,在char范围内转换为指针的整数内进行写入或读取将发生段错误。

10-05 18:31
查看更多