gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:59:42 24 4
gpt4 key购买 nike

请帮助我删除以下代码的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com