C - 使用char str()函数的运行时错误

时间:2015-04-17 02:10:08

标签: c function char runtime

我有一个全局变量,字符。

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 '!';
    }
}

这个函数编译得很好但是当我在int main()函数中使用时,程序因为一些运行时错误而崩溃。 IE:

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

-----甚至-----

scanf("%s", character);
char *str_ptr = str(); //crashes here
printf("%p", *str_ptr );

3 个答案:

答案 0 :(得分:0)

%s格式说明符期望以空终止字符串作为参数 请改用%c来打印单个字符。

char *str_ptr = str();

导致编译器错误,因为您无法将char转换为char *

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

strcmp函数比较两个字符串。

因此,两个参数必须是NUL终止字符串。

char字符[1]没有字符和NUL终结符的空间。

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

建议

if( 'N' == character[0] ) return 'N';
....
// used when character[0] does not match any of the above comparisons.
return '!';  

注意:如果'每个感兴趣的字符的陈述, 然后返回&#39 ;;';