c - C语言编程中的Sigabrt错误

标签 c arrays printf sigabrt

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

#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);}

最佳答案

想想源数组和目标数组之间的差异,目标中缺少一​​些东西。空终止符。

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

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

处理这个问题的最简单方法是对数组进行零初始化,例如

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

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

另外,FWIW,

  • 您应该使用 scanf("%24s",x);

    < 行来限制输入的长度,以防止因输入长度超过预期而导致缓冲区溢出/里>
  • 最好使用 fgets() 来获取用户输入。如果您必须使用 scanf(),您可以使用它,但请使用适当的错误检查。

关于c - C语言编程中的Sigabrt错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46052271/

相关文章:

c - 使用 c 中的 strtok() 函数从子 token 中提取 token 的问题

javascript - 按多个属性对数组中的对象进行排序

将二维数组中的字符串复制到一维数组中

C: 当我将值放在括号中时,打印 %c 不起作用

c++ - printf 如何从 float 中提取数字?

c++ - 为什么 allegro 会自动处理最小化按钮,而不是关闭按钮?

c - 如何设置列表框背景颜色

c++ - OpenGL 核心和兼容性

我可以像这样初始化一个空的 2D C 字符串吗?

C - sprintf() 影响数组声明