【问题标题】:C unable to read from a file with fgets [closed]C无法使用fgets从文件中读取[关闭]
【发布时间】:2016-05-07 16:04:25
【问题描述】:

我想从文件.txt 读入 C 中的内存。

我将txt 文件与源文件放在同一个位置,所以fileName 被指定为small_addressbook.txt

当我在 Eclipse 中(在 macbook 上)运行代码时,它总是打印 File not found,而在 Unix 中,我得到了 segmentation fault

我尝试在 Unix 中运行 gdb 并收到以下错误报告:

Program received signal SIGSEGV, Segmentation fault.
__strncpy_sse2_unaligned ()
    at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:666
666     mov %rcx, (%rdi)

【问题讨论】:

  • char entry[] = EMPTY_STRING; --> char entry[100];char entry[100] = EMPTY_STRING;
  • malloc(sizeof aNode) --> malloc(sizeof *aNode)
  • aNode = (*create)(); : 内存泄漏
  • 对不起,你能解释一下这种情况下的内存泄漏吗?
  • 因为它被覆盖了。

标签: c file fgets


【解决方案1】:

调用函数时使用绝对文件路径(例如:“C:/MyFolder/MyFile.txt”)

【讨论】:

    【解决方案2】:

    UNIX gdb 命令对于检测代码的任何问题非常有帮助。

    例如,如果我们使用以下命令编译程序:

    gcc -ansi -Wall -pedantic test1.c test2.c ... -o test

    并获得了segmentation fault

    然后我们使用gdb 命令查看问题:

    gdb test gdb run

    将返回错误/问题报告。然后我们可以在程序中使用bt命令进行回溯。

    在这篇具体的帖子中,正如我们所见:

    Program received signal SIGSEGV, Segmentation fault.
    __strncpy_sse2_unaligned ()
        at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:666
    666     mov %rcx, (%rdi)
    

    SIGSEGV 表示正在分段的信号,特别是Segmentation fault

    然后__strncpy__se2__ 表示问题在于传递给方法strncpy 的某些值,而sse2 表示段2,就像源文件.c 传递值的顺序一样。

    最后,unaligned 表示此方法 strncpy 可能与其他一些为该值分配内存的方法发生冲突。

    足够的信息来解决问题。

    【讨论】:

    • C 没有方法
    猜你喜欢
    • 2015-09-06
    • 2019-05-29
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多