写了三个小的几乎一样的test代码,但是输出却不同,不明白为什么,求大神指点。
全部代码如下:
#include
void sub1(void);
int main()
{
/*test1*/
sub1();
/*test2 */
char w0[2]={'a','a'};
char * pc0 = w0;
printf("\nw1 = %s",w0); /*wrong*/
printf("\nw1 = %s",pc0); /*wrong*/
/*test3 */
char w1[2];
char * pc = w1;
printf("\n\nInput:");
scanf("%2s",w1); /*try input aa*/
printf("\nw1 = %s",w1); /*right*/
printf("\nw1 = %s",pc); /*right*/
return 0;
}
void sub1(void)
{
char w1[2];
char * pc = w1;
printf("\nInput:");
scanf("%2s",w1); /*try input aa*/
printf("\nw1 = %s",w1); /*right*/
printf("\nw1 = %s",pc); /*wrong*/
}
凡是scanf输入的地方,都是输入aa,然后回车。请问为何得到的结果,三个都不同。我在注释里标明了正常输出的代码和错误输出的代码。理论上3个实验中,字符串都没有用\0结尾,那么为何有些能够正常输出?
题主这个问题问的好,我学的时候就没有你这么细心。
观察一下就会发现,当需要手动输入2个字符时,最后就不会出错;
而初始化时赋值2个字符,输出就会有问题。
我们继续往后推:在命令行界面赋值和程序初始化赋值有什么区别?
那就是:初始化只给定字符,没有输入结束标志(没有'\0'),但手动输入时,我们最后都会敲一个回车键('\n'),那么在这里,回车就代表了字符数组结束标志。
即便数组大小都被限定,但是字符数组的第一限制不是大小而是结束标志!
你这基础,,,,,,醉了,,,,,,,好好看看SCANF的参数要求,在看看你的使用是不是正确的。