使用顶部多行注释中显示的输入运行此代码时,出现分段错误运行时错误。谁能解释为什么或如何解决这个问题?
Removed code section to avoid self plagiarism
答案 0 :(得分:4)
您的代码中存在多个错误。
首先,我假设您使用制表符分隔的方式输入输入字符串,因为您在%[^\t]
中使用scanf
作为格式字符串。如果不输入Tab,它将无限期读取,并且很快会使输入数组溢出。
第二,常量EOF
不是C样式字符串的终止符。字符串始终以空字符(或零-基本上相同)结尾。 EOF为负值,因此通常不会出现在字符串中。因此,用于查找字符串长度的for
循环将无限期地运行,并且超出范围。
第三,您的length
实际上比字符串的长度大一倍,因为length++
循环之后过多的for
。当循环退出时,userString[length]
已经指向零终止符(假设您已纠正了上一段中的错误)。无需增加它。
最后,不必测试length
处的字符,因为它是零。您希望将i <= length
更改为i < length
,尽管如果不这样做,该程序将可以很好地用于您的示例。