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