C-使用char str()函数时出错

C-使用char str()函数时出错,c,function,char,runtime,C,Function,Char,Runtime,我有一个全局变量,character char character[1]; char str(){ if (strcmp(character,"N")) { return 'N'; }else if (strcmp(character,"S")) { return 'S'; }else if (strcmp(character,"E")) { return 'E'; }else if (strcmp(characte

我有一个全局变量,character

char character[1];
char str(){
    if (strcmp(character,"N")) {
        return 'N';
    }else if (strcmp(character,"S")) {
        return 'S';
    }else if (strcmp(character,"E")) {
        return 'E';
    }else if (strcmp(character,"W")) {
        return 'W';
    }else if (strcmp(character,"Q")) {
        return 'Q';
    }else if (!((strcmp(character,"N"))||(strcmp(character,"S"))||(strcmp(character,"E"))||(strcmp(character,"W"))||(strcmp(character,"Q")))) {
        return '!';
    }
}
char *str_ptr = str();
这个函数编译得很好,但是当我在int main()函数中使用时,由于一些运行时错误,程序崩溃了。即:

scanf("%s", character);
printf("%s", str()); //crashes here
-----甚至-----


%s
格式说明符需要以null结尾的字符串作为参数。
改用
%c
打印单个字符

char character[1];
char str(){
    if (strcmp(character,"N")) {
        return 'N';
    }else if (strcmp(character,"S")) {
        return 'S';
    }else if (strcmp(character,"E")) {
        return 'E';
    }else if (strcmp(character,"W")) {
        return 'W';
    }else if (strcmp(character,"Q")) {
        return 'Q';
    }else if (!((strcmp(character,"N"))||(strcmp(character,"S"))||(strcmp(character,"E"))||(strcmp(character,"W"))||(strcmp(character,"Q")))) {
        return '!';
    }
}
char *str_ptr = str();
由于无法将
char
int转换为
char*
,因此导致编译器错误


顺便说一句,您可以使用==运算符比较两个字符。

您的scanf/printf格式代码错误。您已将函数原型化为char(而不是char*)。尝试使用%c而不是%s。还要记住,char和char*是非常不同的东西,一个是单个字符的存储位置,另一个是指向一个或多个字符位置的指针。

strcmp函数比较两个字符串

因此,这两个参数都必须是以NUL结尾的字符串

字符[1]不能同时容纳字符和NUL终止符

代码实际上只是将全局变量中的单个字符与文字字符进行比较

暗示

if( 'N' == character[0] ) return 'N';
....
// used when character[0] does not match any of the above comparisons.
return '!';  
注:每个感兴趣的字符有一个“如果”语句, 然后是返回“!”