使用getline()C时出现分段错误

时间:2017-03-11 13:35:14

标签: c getline

我看过的每个其他线程都有没有将行初始化为NULL而len为0的问题。这是我的代码的一部分:

$git push origin dev
fatal: remote error:
 You can't push to git://github.com//name_of_repo.git
 Use https:://github.com//name_of_repo.git

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的代码有多个问题,

  1. 如果read < 2则您的索引小于0
  2. 如果pchNULL,则您取消引用NULL指针

    关于strtok()

    的说明
    • 如果找不到分隔符,则返回NULL
    • 处理多个字符串或在多线程程序中使用它是非常糟糕的,因为它不可重入。
    • 总有一个更好的选择,包括strchr()strstr()strpbrk(),所有这些都没有strtok()的限制。

    注意,我并不是说你不应该使用strtok(),有合理的情况,这是最好的选择,我只是警告你一些限制并澄清它的预期行为,以便你使用它正确地说,假设它只是因为你“知道”输入而返回了一些东西,这只是一个糟糕的编程习惯。总是检查错误,最好知道程序失败的原因而不是完全困惑。

    事实上,说或者认为“你知道输入”是错误的,因为

    1. 编写处理单个输入的代码有什么意义?

    2. 这不是您的想法,有些字符可能对您很清楚,但编辑可以像'\t'空格一样呈现' '标签字符。

  3. 你不应该责怪它getline(),因为已知它能正常工作,所以这不是它的错。

    您的程序调用未定义的行为,因此无法确定问题的确切位置,因为它可能会发生在某个地方并且程序会一直持续,直到有人做了触发分段错误的事情。