为什么在此代码中出现分段错误?

时间:2018-07-28 10:04:57

标签: c segmentation-fault runtime-error c-strings

使用顶部多行注释中显示的输入运行此代码时,出现分段错误运行时错误。谁能解释为什么或如何解决这个问题?

Removed code section to avoid self plagiarism

1 个答案:

答案 0 :(得分:4)

您的代码中存在多个错误。

首先,我假设您使用制表符分隔的方式输入输入字符串,因为您在%[^\t]中使用scanf作为格式字符串。如果不输入Tab,它将无限期读取,并且很快会使输入数组溢出。

第二,常量EOF不是C样式字符串的终止符。字符串始终以空字符(或零-基本上相同)结尾。 EOF为负值,因此通常不会出现在字符串中。因此,用于查找字符串长度的for循环将无限期地运行,并且超出范围。

第三,您的length实际上比字符串的长度大一倍,因为length++循环之后过多的for。当循环退出时,userString[length]已经指向零终止符(假设您已纠正了上一段中的错误)。无需增加它。

最后,不必测试length处的字符,因为它是零。您希望将i <= length更改为i < length,尽管如果不这样做,该程序将可以很好地用于您的示例。