数组、指针问题解答
以下程序:
#include <stdio.h>
void main()
{
char *s1;
printf( "sizeof(s1)=%d ",sizeof(s1));
scanf( "%s%s ",s1);
printf( "s1=%s ",s1);
printf( "sizeof(s1)=%d ",sizeof(s1));
getch();
}
运行情况:
输入:string1
输出:2 string 2
我想问:在以%s做为格式输入时,是自动添加 '\0 '的吧? 输入的“string1“是存放在堆中的吧(我不太确定,谁能确认一下),s1作为指针指向它?
那么如下程序:
以下程序:
#include <stdio.h>
void main()
{
char s1[3];
printf( "sizeof(s1)=%d ",sizeof(s1));
scanf( "%s%s ",s1);
printf( "s1=%s ",s1);
printf( "sizeof(s1)=%d ",sizeof(s1));
getch();
}
运行情况:
输入:string1
输出:3 string 3
这里的s1似乎还是被当作指针,并没有当作数组处理,为什么?谢谢。
[解决办法]
#include <stdio.h>
void main()
{
char s1[3];//如果以字符串输入,就只能输入3-1个效字符,否则就会越界
printf( "sizeof(s1)=%d ",sizeof(s1));//sizeof(s1)得到的是s1的类型的长度,测字符串用strlen(s1)
scanf( "%s%s ",s1);//%s是字符串输入格式,%s对应一个字符串
printf( "s1=%s ",s1);
printf( "sizeof(s1)=%d ",sizeof(s1)); //也是测量的s1的类型
getch();
}