Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 逐行读取文件错误_C++ - Fatal编程技术网

C++ 逐行读取文件错误

C++ 逐行读取文件错误,c++,C++,我必须解析文件中的数据。该文件具有以下结构: text1.txt 1 text2.txt 2 text3.txt 4 该文件可在以下网址下载: 我想得到text1.txt和1。因此,我的代码如下: #include <stdio.h> void main() { FILE *fp= NULL; int status= -1; char name[100]; char *filename="test.txt"; fp= ::fopen(filename, "r

我必须解析文件中的数据。该文件具有以下结构:

text1.txt 1
text2.txt 2
text3.txt 4
该文件可在以下网址下载: 我想得到text1.txt和1。因此,我的代码如下:

#include <stdio.h>
void main() 
{ 
FILE    *fp= NULL;
int     status= -1;
char    name[100];
char *filename="test.txt";
fp= ::fopen(filename, "rt");
if (!fp)
    {
        printf("\Error open: \"%s\"\n\n", filename);
        return;
    }
do
{
int number=0;
status= fscanf(fp, "%s %d", name,number);

}
while (status!= EOF);
}

错误为“访问冲突写入位置0x00000000”。问题是什么?您能帮我修复吗?

通过地址将要扫描的参数传递到
fscanf

fscanf(fp, "%s %d", name, &number);
编译器可能警告您:

warning: format ‘%d’ expects argument of type ‘int *’, but argument 4 has type ‘int’ [-Wformat=]

您的代码具有未定义的行为,这是崩溃的根源。

请阅读
fscanf
的手册,您确定编译器没有告诉您任何警告吗?当输入的字符串为100个或更多字符时会发生什么情况?否。在%d处出现问题,状态=fscanf(fp,“%s%d”,名称,编号);如果我只使用Stase= FSCANF(FP,“%s”,name),那么这个问题就几乎没有资格C++了。除了
::fopen()
中的
::
之外,它是一个C程序。
状态!=EOF
可能应该
状态==2
(除非你喜欢读垃圾)非常感谢。I修复了对
int*
实际未定义行为的强制转换?fscanf将尝试在具有未定义行为的无效地址写入@user3677103:在StackOverflow上,如果答案对你有帮助,记得接受它们。@MattMcNabb我假设从
int
int*
的隐式转换是quantdev所指的未定义行为——他在评论中澄清了这一点。谢谢你,quantdev!好啊没有所谓的“隐式投射”;这里发生的事情(或者如果不是明确的未定义的行为将会发生的事情)是一个别名。一个对象在内存中的表示被读取,就好像它是另一类型对象的表示一样。别名也不同于转换。
warning: format ‘%d’ expects argument of type ‘int *’, but argument 4 has type ‘int’ [-Wformat=]