我正在编写一个程序来扭转字符串中的单词,即 "abc def"
到 "def abc"
。
我使用fgets()
读取输入。我正在使用:
for(j = i;((buff[i] != ' ') || (buff[i] != 'n'));i++ );
识别线路的空间或末端。
,但我最终遇到了分段故障。
单独检查空间,一切正常。
请帮助我。
((buff[i] != ' ') || (buff[i] != 'n'))
这意味着"在字符不是空间的时候继续前进或不是newline。
由于字符永远不能同时是空间和新线,因此至少这些子条件的一个始终是正确的。让我们以几个例子:
value (value != ' ') (value != 'n') or'ed result
------- -------------- --------------- ------------
space false true true
newline true false true
'A' true true true
因此,您有一个无限的循环,几乎可以肯定是引起您问题的原因。
我建议您用更正确的 &&
替换 ||
,如"在角色是空间和的情况下继续前进,而不是newline":
value (value != ' ') (value != 'n') and'ed result
------- -------------- --------------- -------------
space false true false
newline true false false
'A' true true true