.char *s; scanf("%s",*s);错在哪里了?

我在参考答案看到解释是"scanf的列表项必须为变量的地址"...不懂什么意思?我也不知道这条错在哪里了.

因为s是指针,所以s才是地址,*s是指向的char类型内容
所以要用scanf("%s",s);不过在用之前先要给s初始化,让其合法,例如让s指向一个字符串数组,不然s是个空指针。追问

意思是把*去掉吗?那s跟&s有什么区别呢?

追答

s是指s本身的值。&s是指存储s变量的空间地址。
假设char a = ‘A';char * s = &a;


a == 'A'
s == &a
*s == 'A'
&s==存储s的单元地址,这个地址可以赋值给指针的指针,例如char **p = &s;

追问

这个我明白了,你的意思是这题把*去掉?可是百度上也有人说去*也不对啊

追答

为什么不对?你在vc上跑一下不就知道了吗。
我说了,在用之前先要给s初始化,让其合法,例如让s指向一个字符串数组,不然s是个野指针,是非法操作。
例如:
char a[10];
char *s = a;

scanf("%s",s);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-04
去掉*s前面的*号就可以了。s是一个字符数组,s本身就代表了这个数组的首地址,不需要再加*号了,直接写scanf("%s",s)就可以了追问

可是很多百度知道说char *s; scanf("%s",s);也是不对的啊.所以很纠结

第2个回答  2013-07-04
char *s; scanf("%s",s);
这样写就好了。
scanf的列表项必须为变量的地址---也就是说上面式子里 s必须是地址才行。char *s说明了s就是地址。追问

可是很多百度知道说char *s; scanf("%s",s);也是不对的啊

第3个回答  2013-07-04
char *s;
scanf("%c",s);将%s改为%c,因为定义的是字符型的,而%s而是字符串的
第4个回答  2013-07-04
scanf("%s",s);
没有*
相似回答