如何在c中打印指针?

时间:2013-10-04 18:13:20

标签: c pointers

有人可以向我解释为什么这段代码会产生分段错误:

char string[] = "this is a string";
char * string2 = "this is another string";
printf("%s\n",string );
printf("%s\n",  string2);
printf("string[2]= %s, string2 = %s\n", string[2], &string2 );

当我尝试打印时,它也会出现同样的错误

*string2 or *string2[2] or &string2[2]

我对此感到很困惑,我在网站上看到的例子似乎也是打印但不是这个。

2 个答案:

答案 0 :(得分:10)

前两个很好,但在最后一个你可能想要:

printf("string[2]= %c, string2 = %p\n", string[2], (void *)&string2 );
                    ^             ^

您遇到了分段错误,因为您试图将printf解释为将小整数(string[2])解释为指针(这是%s所期望的)。

答案 1 :(得分:0)

char * string2 = "this is another string";  

声明导致string2指向t(字符串的第一个字符),这并不意味着*string2是整个字符串(On derefrencing string2),即{ {1}}。如果您尝试使用"this is another string"打印*string2,则会导致细分错误,但%s会打印%c
要使用t说明符打印指针。