C指针概念分段错误

问题描述 投票:0回答:1

请看一下代码片段,我无法理解为什么代码会出现分段错误和垃圾字符。


#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    

}


c segmentation-fault
1个回答
0
投票

char *p=str;
是不兼容的指针类型初始化,因为
str
是 char *[1]`。

printf("%d\n",ptr)
不是打印指针的方式。那将是:

printf("%p\n", (void *) ptr)`

printf("%s \n",*ptr,);
是由于缺少参数而导致的语法。

© www.soinside.com 2019 - 2024. All rights reserved.