为什么我收到此错误"访问违规写入位置"?

时间:2014-12-11 12:46:18

标签: c++ visual-c++

我正在尝试编写一个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等几个文件。

但在此我得到了几个错误,如:

  1. 访问违规位置错误(我在文件名中发现了此错误)

  2. 正在使用变量'c'而未初始化。

  3. 如果有人可以提供帮助,那将是一个很大的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

同样对于你的第二个错误,但演员阵容更加严重错误:

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

这会读取未初始化的变量c,因此您的“无需初始化” - 警告,即UB。 接下来,您强制将其转换为char*,但从不担心:在现代桌面上,通过转换为指针的char范围内的整数进行写入或读取将会出现段错误。