C 为什么使用';%取消对字符指针的引用会导致程序崩溃s';?

C 为什么使用';%取消对字符指针的引用会导致程序崩溃s';?,c,string,pointers,C,String,Pointers,我正在学习c,一个初学者,谁能让我明白我缺少的是哪个概念? 先谢谢你 #include<stdio.h> int main() { char s[10]; s[0]='A'; s[1]='B'; s[2]='\0'; char *p; int i; p=s; printf("%c\n", *p); //It's ok. printf("%s", *p); // or *s...what's wrong

我正在学习c,一个初学者,谁能让我明白我缺少的是哪个概念? 先谢谢你

#include<stdio.h>

int main()
{
    char s[10];
    s[0]='A';
    s[1]='B';
    s[2]='\0';
    char *p;
    int i;

    p=s;


    printf("%c\n", *p); //It's ok.


    printf("%s", *p); // or *s...what's wrong here,why does program crash?

    return 0;
}
#包括
int main()
{
chars[10];
s[0]='A';
s[1]='B';
s[2]='\0';
char*p;
int i;
p=s;
printf(“%c\n”,*p);//没问题。
printf(“%s”,*p);//或*s…这里怎么了,为什么程序会崩溃?
返回0;
}
更改

printf("%s", *p);

原因是
%s
需要一个指针,
*p
p
处的解引用值,也称为
p[0]
处的字符值

如果这不合理,请描述
printf(“%c\n”,*p)
工作的原因
*p
p[0]
相同,这与
s[0]
相同,因为
p
指向
s
。因为
s[0]
是一个
char
%c
在这里工作,因为它需要一个
char
。但是另一方面,
%s
期望
char*

改变

printf("%s", *p);

原因是
%s
需要一个指针,
*p
p
处的解引用值,也称为
p[0]
处的字符值


如果这不合理,请描述
printf(“%c\n”,*p)
工作的原因
*p
p[0]
相同,这与
s[0]
相同,因为
p
指向
s
。因为
s[0]
是一个
char
%c
在这里工作,因为它需要一个
char
。但是另一方面,
%s
期望
char*
您想要
printf(“%s”,p)
。不要取消对指针的引用。

您需要
printf(“%s”,p)
。不要取消引用指针。

因为它需要的是指针,而不是取消引用的值。
%s
需要的是
字符*
,而不是
字符。
。打开所有编译器警告。一个好的编译器应该警告过
char*p。。。printf(“%s”,*p)。因为它需要的是指针而不是取消引用的值。
%s
需要的是
char*
,而不是
char
。请打开所有编译器警告。一个好的编译器应该警告过
char*p。。。printf(“%s”,*p)。谢谢,我现在明白了,因为'%s'需要字符*@没问题,如果你觉得答案有帮助,那么别忘了投票或接受答案。祝你好运!这是我的第一个问题。很快就解决了。太酷了!:)@Sumon可以更快地解决您的问题,启用所有编译器警告。@Chris您上次编辑的内容正是我真正要搜索的内容,作为一名新手,向我提供完美的解释,再次感谢!谢谢,我现在明白了,因为'%s'需要字符*@没问题,如果你觉得答案有帮助,那么别忘了投票或接受答案。祝你好运!这是我的第一个问题。很快就解决了。太酷了!:)@Sumon可以更快地解决您的问题,启用所有编译器警告。@Chris您上次编辑的内容正是我真正要搜索的内容,作为一名新手,向我提供完美的解释,再次感谢!