有人可以向我解释为什么这段代码会产生分段错误:
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]
我对此感到很困惑,我在网站上看到的例子似乎也是打印但不是这个。
答案 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
说明符打印指针。