gpt4 book ai didi

c++ - 尝试使用 fread 读取文本文件时出现类型为 'System.AccessViolationException' 的未处理异常

转载 作者:行者123 更新时间:2023-11-28 03:32:53 26 4
gpt4 key购买 nike

我正在尝试使用 fread() 读取一个简单的文本文件(此处为 out.wsp),但我得到“类型为未处理的异常” System.AccessViolationException'”。我在 VS2010 express 中遇到此错误,但是当我在 Linux 中编译并运行它时,一切正常。知道代码有什么问题吗?另外,由于我是 C/C++ 的新手,还有其他方法可以做这样的事情吗?

#include "stdafx.h"

#include <stdio.h>

using namespace std;

int main(){


char* wspfile = "out.wsp";
FILE* fp = NULL;

fp = fopen( wspfile , "r");
if(fp == NULL) {
printf("Error: can not open file %s\n", wspfile);
return -1;
}
rc = fread(wspfile,sizeof(wspfile)-1,1, fp);
wspfile[rc] = '\0';
fclose(fp);

return 0;

}

谢谢,

幻想曲

最佳答案

修改字符串文字是非法的(未定义的行为):

char*  wspfile    = "out.wsp";
...
rc = fread(wspfile,sizeof(wspfile)-1,1, fp); /* sizeof() is a sizeof(char*),
not an array which is probably
what you intended. */

这将是访问冲突的原因。

要解决您可以更改为:

char wspfile[] = "out.wsp";

或者,更好的是,对文件名中的内容使用不同的 char[] 变量。

请注意 fread() 的签名是:

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

发布的代码,如果 wspfile 是一个数组,将要求 fread() 读取 7< 的 1 字节大小。如果成功,fread() 将返回 1,因为它返回读取的项目数,而不是字节数。下面一行:

wspfile[rc] = '\0'; 

会有效地将数组截断为单个字节。更改 sizecount 参数的顺序以更正此问题。

关于c++ - 尝试使用 fread 读取文本文件时出现类型为 'System.AccessViolationException' 的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11988135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com