c - 从文本文件读取的程序尝试在文件完成后读取额外的行
问题描述
我正在开发一个程序,该程序假设从文本文件中读取信息。在这个问题的帮助下,我当时能够读到 1 行。现在我编写了一个循环,它通过文件运行并读取所有文件:
int main(void)
{
FILE * fp;
fp = open_file("test.txt");
while(1){
if(feof(fp))
break;
product_t * product = read_line(fp);
print_product(product);
}
fclose(fp);
return(0);
}
这是我用来从文本文件中读取的整个程序:https ://pastebin.com/pe1XZj7c
我试图读取的文件如下所示:
H235 Sportello_dx N246 15:20:43 15:27:55
K542 Sportello_sx N247 10:03:10 10:15:30
A356 Maniglia_fronte G102 18:40:11 18:52:23
该程序读取整个文件并正确处理数据,但随后出现分段错误。这是整个程序的输出:
product_t code_product: H235
product_t name: Sportello_dx
product_t code_piece: N246
product_t enter: 15:20:43
product_t exit: 15:27:55
product_t code_product: K542
product_t name: Sportello_sx
product_t code_piece: N247
product_t enter: 10:3:10
product_t exit: 10:15:30
product_t code_product: A356
product_t name: Maniglia_fronte
product_t code_piece: G102
product_t enter: 18:40:11
product_t exit: 18:52:23
Segmentation fault
我使用 GDB 试图找出导致分段错误的原因。这是它给我的输出,包括回溯:
Starting program: /home/trie/Desktop/Progett Asd/a.out
product_t code_product: H235
product_t name: Sportello_dx
product_t code_piece: N246
product_t enter: 15:20:43
product_t exit: 15:27:55
product_t code_product: K542
product_t name: Sportello_sx
product_t code_piece: N247
product_t enter: 10:3:10
product_t exit: 10:15:30
product_t code_product: A356
product_t name: Maniglia_fronte
product_t code_piece: G102
product_t enter: 18:40:11
product_t exit: 18:52:23
Program received signal SIGSEGV, Segmentation fault.
__GI_____strtol_l_internal (nptr=0x0, endptr=endptr@entry=0x0,
base=base@entry=10, group=group@entry=0,
loc=0x7ffff7dd4400 <_nl_global_locale>) at ../stdlib/strtol_l.c:293
293 ../stdlib/strtol_l.c: No such file or directory.
(gdb) backtrace
#0 __GI_____strtol_l_internal (nptr=0x0, endptr=endptr@entry=0x0,
base=base@entry=10, group=group@entry=0,
loc=0x7ffff7dd4400 <_nl_global_locale>) at ../stdlib/strtol_l.c:293
#1 0x00007ffff7a70c82 in __strtol (nptr=<optimized out>,
endptr=endptr@entry=0x0, base=base@entry=10) at ../stdlib/strtol.c:106
#2 0x00007ffff7a6e290 in atoi (nptr=<optimized out>) at atoi.c:27
#3 0x0000555555554b5b in timestring_to_time (timestring=0x5555557589ea "18")
at assembly_line_manager.c:106
#4 0x0000555555554a95 in read_line (fp=0x555555757010)
at assembly_line_manager.c:82
#5 0x0000555555554924 in main () at assembly_line_manager.c:38
在从文件中读取所有内容之后,程序似乎正试图使用无效数据调用 atoi 函数。为什么要这样做?我该如何预防?
解决方案
推荐阅读
- azure-devops - 是否可以自动将外部 git 存储库同步到 AzureDevOps 托管的内部 git 存储库?
- jquery - Cakephp 3.6.14:使用新内容提交 ajax 表单后重新加载 BootstrapTable 内容
- excel - 如果有重复则插入一个新值
- javascript - 三.js 使object.rotation.x 平滑
- python - os.path.exists 返回错误的结果
- ruby-on-rails - 如何将设计用户分成不同的类型?
- java - 你如何实现 mongoTemplate.findDistinct()?
- javascript - R shiny app, making a log that scrolls down automatically
- c++ - 尝试重新分配内存时出现写访问冲突
- python - 无法创建 PMMLPipeline