请看一下代码片段,我无法理解为什么代码会出现分段错误和垃圾字符。
#include<stdio.h>
int main()
{
char * str[1];
str[0] = "apple";
char **ptr = str;
char *p=str;
printf("%d\n",ptr); //---> 1956347328
printf("%d\n",p); //---> 1956347328
printf("%s \n",*ptr,); // ---> prints apple
printf("%s\n",*p); // ---> error segmentation fault
printf("%s\n",p); // ---> Garbage characters
}
char *p=str;
是不兼容的指针类型初始化,因为 str
是 char *[1]`。
printf("%d\n",ptr)
不是打印指针的方式。那将是:
printf("%p\n", (void *) ptr)`
printf("%s \n",*ptr,);
是由于缺少参数而导致的语法。