c编程中的Sigabrt错误

时间:2017-09-05 10:03:53

标签: c arrays printf sigabrt

plz帮我删除以下代码的SIBABRT错误,plz告诉我为什么即使在获得正确的输出后也会出现此错误

#include<stdio.h> 
#include<string.h>

int main()
{
char x[25],y[25];
int i,j=0;
scanf("%s",x);
for(i=0;i<strlen(x);i++)
{
    if(x[i]>=97 && x[i]<=122)
    {
        y[j]=x[i]-32;
        j++;
    }
    else if(x[i]>=65 && x[i]<=90)
    {
        y[j]=x[i]+32;
        j++;
    }

}
printf("%s",y);}

2 个答案:

答案 0 :(得分:1)

考虑源数组和目标数组之间的差异,目标中缺少某些内容。空终止符。

注意:这两个数组都是具有自动存储的局部变量,除非明确初始化,否则它们的内容是不确定的。

如果没有空终止符,printf()将在使用调用undefined behavior%s进行打印时超出所提供数组的范围。

处理此问题的最简单方法是对数组进行零启动,例如

  char x[25] = {0} ,y[25] = {0};

使数组的所有元素都设置为0,并且相同的值用作空终止符,您不需要手动将其添加到目标数组。

此外,FWIW,

  • 您应该对输入进行长度限制,以防止缓冲区溢出超过预期的输入,使用scanf("%24s",x);

  • 行中的内容
  • 最好使用fgets()来获取用户输入。如果,iff,您必须使用scanf(),您可以使用它,但请使用正确的错误检查。

答案 1 :(得分:0)

如果输入少于25个字符,则字符串将以空值终止。如果大小超过指定的数组大小,则它将覆盖不属于该数组的内存。

因此visitedfgets()的替代方案。