如何在c中打印指针?

use*_*666 3 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 );
Run Code Online (Sandbox Code Playgroud)

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

*string2 or *string2[2] or &string2[2]
Run Code Online (Sandbox Code Playgroud)

我对此非常困惑,同样我在网站上看到的例子似乎是打印而不是这个.

cni*_*tar 10

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

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

你得到一个分段错误,因为你正在试图printf将一个小整数(string[2])解释为一个指针(这是%s预期的).

  • @zubergu这就是`%p`想要的:一个`void*`,而不仅仅是任何类型的指针.它可能对大多数机器没有任何影响,但遵循规则是很好的. (4认同)