C-分段错误

C-分段错误,c,C,最近,我开始研究内置函数,但出现了一个错误,即: 为什么我的程序出现了分段错误 #include<stdio.h> #include<ctype.h> int main() { char str[50]; int n; printf("Who is your best friend? "); scanf("%s",str); n=isalpha(str); if(n!=0) { printf("Is

最近,我开始研究内置函数,但出现了一个错误,即:

为什么我的程序出现了分段错误

#include<stdio.h>
#include<ctype.h>
int main()
{
    char str[50];
    int n;
    printf("Who is your best friend? ");
    scanf("%s",str);
    n=isalpha(str);
    if(n!=0)
    {
        printf("Is Alpha");
    }
    else
    {
        printf("Invalid Input");
    }
    return 0;
}
#包括
#包括
int main()
{
char-str[50];
int n;
printf(“谁是你最好的朋友?”);
scanf(“%s”,str);
n=isalpha(str);
如果(n!=0)
{
printf(“是Alpha”);
}
其他的
{
printf(“无效输入”);
}
返回0;
}
请帮帮我…

s原型是

int isalpha( int ch );
参数的类型为
int
。但是您要传递的是
char*
类型,因为
str
是字符数组

也许你的意思是

unsigned char str;
scanf("%c",&str);
isalpha()
如果参数不是字母,则返回
0

为了避免溢出,您可以将
scanf()
修改为

scanf("%49s",str);
使用一个字符存储
\0
字符

看看这篇文章


编辑:
isalpha()
的参数不应该是
char
。如前所述,它必须至少是
无符号字符
。感谢您指出这一点。

使用所有警告和调试信息编译代码:
gcc-Wall-Wextra-g
with。改进您的代码以避免收到警告。然后还要阅读,尤其是您正在使用的每个函数(因为您错误地使用了它们)的开头:
isalpha
char
作为参数,而不是
char
的数组。此外,此代码与递归无关。即使使用
char
,您也需要
isalpha((unsigned char)ch)
来避免未定义的行为。感谢您指出。已编辑。即使在scanf声明中进行了更正,但仍然不能满足我的输出。因为当我输入“gh23s”时,给我输出的程序“是Alpha”,但我应该得到“无效输入”…@ShubhamKumarSingh您是否修复了对
isalpha
的调用?怎么做?对不起,我没听懂你的话…你能给我澄清一下吗。。。