我正在尝试编写一个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'而未初始化。
如果有人可以提供帮助,那将是一个很大的帮助。
答案 0 :(得分:1)
strcat((char *)foldername, "L1_matrix");
strcat
接受一个in-out参数,该参数指向一个包含以0结尾的字符串的缓冲区,并且大到足以存储结果,以及一个指向字符串的指针。
你给它foldername
并确保它实际上通过强制转换指向可修改的缓冲区
别撒谎!
同样对于你的第二个错误,但演员阵容更加严重错误:
fgets((char *)c,512,fp)
这会读取未初始化的变量c
,因此您的“无需初始化” - 警告,即UB。
接下来,您强制将其转换为char*
,但从不担心:在现代桌面上,通过转换为指针的char
范围内的整数进行写入或读取将会出现段错误。