C语言中用printf输出字符串, printf("%s\n %s\n",*p,p);运行不了啊??

如题所述

printf("%s",p);
是指从指针p所指向的字节开始输出,直到读到'\0'字符

而*p则是只p指向的字符,也就是字符串的第一个字符 
如果printf("%s\n",*p);则系统会将p所指向的字符化为内存地址,并从那里开始读取……
(例如字符串开头为'0'则从内存地址0x00000030开始读取
等价于
char *p=48;
printf("%s\n",p);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-28
printf应该改为printf("%c\n %s\n",*p,p);
%s表示要打印的是字符串,所以后面应该是char*,而你写*p是表示a[0]的字符值
第2个回答  2015-10-14
printf是C语言中的格式化输出函数,需要将第一个参数字符串中的格式字符与后面参数中的匹配,否则就会出错。
比如当格式字符为%d时,后面对应位置的参数就必须是int型,或者可以转为int型的其它类型。
在 printf("%s\n %s\n",*p,p);这句中,格式字符有两个均为%s,对于这个格式字符,后续的参数必须为char *型,即字符指针或一维字符数组类型。
后续传入了两个参数,*p和p,这样无论p是什么类型,*p和p中至少有一个不是char *型,所以必然会出错。