可乐与酱油 发表于 2019-6-2 12:15:54

C语言的字符串数组的问题

问题描述:
我定义了一个字符数组
#define LEGALS 5

const char legalInput = {"0","1","2","3","quit"};//只有五种可能的输入

当我把它调试输出的时候
printf(legalInput);

输出会是quit,这没有问题

但是当我把它放到我的程序里面的时候
char getInput(){
        int i;
        char inp = {"quit"};
       
        while (1){
                //获取输入
                scanf("%4s",inp);//最多读取四个字符
                while(getchar() != '\n');//将后面多余的字符全部丢弃;
               
               
                /*下面是校验目录页输入是否合法*/
                for (i=0;i<LEGALS;i++){
                        /*调试输出*/
                        printf("%s\t\t",inp);
                        printf(legalInput);
                        printf("\n");

                        if(strcmp(inp,legalInput)==0)
                                return i;
                       
                }
                /*-------校验结束-----------*/
               
               
                //运行到了这一步了,就说明用户没有按照规则来输入,所以折返到while代码块的第一行
                printf("%s",inp);
                printf("非法输入!\n");
       
       
        }
}
调用上面这个函数的时候的输出如下
quit            0
quit         1
quit         2
quit         3
quit         quit16
quit非法输入!



问题:
1.为什么我输入的quit经过每一次循环就会多一些奇怪的后缀?
2.为什么我这一次调试输出 legalInput 的时候多了一个16?

谢谢大佬的解答{:10_254:}

人造人 发表于 2019-6-2 13:14:25

char inp = {"quit"};

可乐与酱油 发表于 2019-6-2 20:41:09

人造人 发表于 2019-6-2 13:14


不懂。。。

人造人 发表于 2019-6-2 22:06:55

可乐与酱油 发表于 2019-6-2 20:41
不懂。。。

quit是4个字符
'\0'是一个字符
一共5个字符

char inp = {"quit"};
char inp = {"quit"};

可乐与酱油 发表于 2019-6-3 22:00:34

人造人 发表于 2019-6-2 22:06
quit是4个字符
'\0'是一个字符
一共5个字符

明白了,谢谢
页: [1]
查看完整版本: C语言的字符串数组的问题