2 halogio halogio 于 2016.01.19 15:26 提问

C语言fprintf和fscanf问题

这段代码是为了打开一个文件,用fprintf输入字符串,在用fscanf返回,最后看fscanf的返回值。但是这段程序一运行就出错,猜测是指针访问问题,但是不明白原理。请大家帮忙看下,谢谢!
出错提醒是:0xCDCDCDCD 处有未经处理的异常(在 ConsoleApplication1.exe 中): 0xC0000005: 执行位置 0xCDCDCDCD 时发生访问冲突。

代码如下
#include
#include

int main(void)
{
char filename[20]="e:\abc.txt";
FILE*fp;
int n;
char str[20]="yes";
if((fp=fopen(filename,"w"))==NULL) perror("open error");
fprintf(fp,"%s",str);
n=fscanf(fp,"%s",str);
printf("%d",n);
fclose(fp);
return 0;
}

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.19 16:42

0xCDCDCDCD
看到这个数字,想都不要想,肯定是没有正确分配内存。

halogio
halogio 恩,是内存出错。 我后来用注释把fscanf这句变成注释,就可以了。 我怀疑是问题出在fprintf和fscanf一起使用上面,但是不明白原理。
接近 2 年之前 回复
jgt_insect
jgt_insect   2016.01.20 06:36

你在文件打开失败时应该结束程序而不是继续读取,比如打开失败执行一个exit函数。打开失败可能是你没有写文件后缀名

halogio
halogio 我试了下,如果把fscanf这个去掉,然后运行程序,,过去看文件是增加了打印的内容的,那么表示fprintf是正常工作的。 所以文件应该正常打开了。
接近 2 年之前 回复
jgt_insect
jgt_insect 回复halogio: 如果你访问出错 有可能是 没有正确打开 但是依旧访问了内存 导致崩溃
接近 2 年之前 回复
halogio
halogio 不是这个问题额,能正确打开的。 是内存访问问题。
接近 2 年之前 回复
halogio
halogio 不是这个问题额,能正确打开的。 是内存访问问题。
接近 2 年之前 回复
q3733353520
q3733353520   2016.01.20 16:36

打开方式的问题!!!!!!!!!!!!!!!!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!