3

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

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]

我对此感到非常困惑,同样,我在网站上看到的示例似乎是打印的,但不是这个。

4

2 回答 2

10

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

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

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

于 2013-10-04T18:14:46.620 回答
0
char * string2 = "this is another string";  

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

于 2013-10-04T18:15:29.323 回答