【发布时间】:2017-11-12 09:26:18
【问题描述】:
#toggle the string
#include <stdio.h>
int main()
{
char S[100],ch;
int i=0;
gets(S);
while((S[i]!='\0')&&(i<100))
{
ch=S[i];
if((ch>='A')&&(ch<='Z'))
S[i]+=32;
else if((ch>='a')&&(ch<='z'))
S[i]-=32;
i++;
}
printf("%s\n",S);
return 0;
}
请让我知道代码有什么问题(代码是将字符串,即大写转换为小写,反之亦然。我收到 SIGABRT 运行时错误...
【问题讨论】:
-
不要使用
gets();它不能安全使用。 -
gets假设 S 的长度是无限的。如果您的输入无法存储在S中(即大于 100 个字符),您将被中止。 -
什么输入触发 SIGABRT?
-
gets(S);==>fgets(S, sizeof S, stdin); -
旁白:你真的应该检查
i<100之前使用它来索引S[100]。切换它们你会得到while((i<100)&&(S[i]!='\0')),短路规则会阻止你索引S越界。
标签: c runtime-error