strtok()和分段错误

时间:2019-03-04 08:24:29

标签: c

我遇到一种情况,当我输入"1111:2222""1111:"":2222"时。

当它是"1111:2222"时-我只打印它。

当它是"1111:"时-我需要为b = 0设置一个默认值,或者为:2222设置一个默认值。

请,我应该如何处理此案? (我只有一个a = 0符号,我处理了这种情况,因为它不重要所以不显示它)

:

1 个答案:

答案 0 :(得分:5)

分段错误的原因是将%s的整数值传递为printf()格式。然后printf()将数字解释为指向字符串的指针。 它们实际上不是指针,而是整数(在这种情况下为小整数),因此会发生奇怪位置的读取,从而引发细分错误。

通过将%s更改为%d或其他采用整数的格式来解决此问题之后,此代码将无法处理:2222的情况并将2222分配给{{1 }},而不是所需的a。 这是因为b删除了分隔符中包含的前缀字符。 因此,看来您必须检查自己的第一个字符是否为strtok()才能解决这种情况。