feof or fscanf error
feof or fscanf error
我正在做一个程序,我使用Dev C++。运行时我的程序终止。在调试时,它显示"分段错误"。我不知道它是否会走向无限循环。我不知道问题出在代码中的while(!feof(program))
还是fscanf(...)
。
任何人都可以帮助解决这个问题吗?请参阅下面的程序:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
fpos_t curDesStart,curDesEnd;
fpos_t curDesLocBackup,curDes;
char *label,*opc,*operands;
char *curMacroName;
FILE *namTab,*desTab,*temp,*program;
namTab=fopen("namTab.txt","rw");
desTab=fopen("desTab.txt","rw");
temp=fopen("temp.txt","w");
program=fopen("program.txt","r");
while(!feof(program))
{
fscanf(program,"%[^n]%[^n]%[^n]",label,opc,operands);
if(!strcmp(label,"MACRO"))
{
fprintf(desTab,"%s%s%sn",label,opc,operands);
fgetpos(desTab,&curDesStart);
strcpy(curMacroName,label);
while(!strcmp(opc,"MEND"))
{
fscanf(program,"%s%s%s",label,opc,operands);
}
fprintf(desTab,"%s%s%sn",label,opc,operands);
fgetpos(desTab,&curDesEnd);
fprintf(namTab,"%s%ld%ldn",curMacroName,curDesStart,curDesEnd);
}
else
{
while(!feof(namTab))
{
fgetpos(desTab,&curDesLocBackup);
fscanf(namTab,"%s%ld%ld",curMacroName,curDesStart,curDesEnd);
if(!strcmp(curMacroName,label))
{
fsetpos(desTab,&curDesStart);
fscanf(desTab,"%s%s%sn",label,opc,operands);
fprintf(temp,".%s%s%sn",label,opc,operands);
do{
fprintf(temp,"%s%s%sn",label,opc,operands);
fgetpos(desTab,&curDes);
}while(curDes<=curDesEnd);
fsetpos(desTab,&curDesLocBackup);
fsetpos(namTab,0);
}
else
{
fprintf(temp,"%s%s%sn",label,opc,operands);
}
}
}
}
fclose(program);
fclose(namTab);
fclose(desTab);
fclose(temp);
getch();
return 0;
}
此代码存在几个问题:
- 如果 program.txt 不存在,fopen() 将返回 NULL
- fscanf(%[...]) 或 fscanf(%s) 需要一个指向 char 的指针,该指针必须提供足够的文本读取和终止 NUL 字节的空间(请参阅 http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html)
- fscanf(%ld) 期望指针指向 long,而不是 long
您既没有为要指向的任何char *
分配存储空间,甚至也没有初始化它们以指向其他内容。结果,您实际上是将随机数传递到fscanf
,这会导致未定义的行为,其中程序崩溃是一种可能的化身。
相关文章:
- "error: no matching function for call to"构造函数错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- C++ "error: invalid use of void expression"
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 为什么我会"error: expected expression"?
- CMake Error at modules/videoio/cmake/detect_ffmpeg.cmake:16
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?
- feof or fscanf error