-5

嗨,请向我解释为什么代码会产生错误,

#include<stdio.h>
int main(){
    char ***x;
    char **q = *x;
    char **(*c) = x;
    char ***d = &q;
    char ***p = "asdasd";

    x=p;

    printf("d:%s\n",d);
    printf("q:%s\n",q);
    printf("x:%s\n",x);


return 0;

}

输出:1 分段错误

嗨,感谢您的回复,所以如果我初始化 x,我仍然遇到分段错误

printf("q:%s\n",q);

输出和代码如下所示,请告知为什么是 d:1231 而不是 1231123124 以及为什么 x=p 只改变 x 的值而不是 all (x, q, d)

int main(){
    char ***x = "1231123124";
    char **q = *x;
    char **(*c) = x;
    char ***d = &q;
    char ***p = "asdasd";

    x=p;

    printf("p:%s\n",p);
    printf("d:%s\n",d);
//  printf("q:%s\n",q);
    printf("x:%s\n",x);
    printf("c:%s\n",c);

    return 0;
}

输出:p:asdasd

d:1231

x:asdasd

联系人:1231123124

4

2 回答 2

2
char **q = *x;

在这里,您正在取消引用未初始化的指针。

这是未定义的行为,在这种情况下,它通常会导致段错误(实际上,您的代码将尝试取消引用某些随机内存位置,或者如果您的编译器初始化局部变量则为 NULL(这对于调试/非优化构建来说是典型的))。

于 2013-07-12T00:04:28.973 回答
1

这些是类型错误。

printf("d:%s\n",d); // d is char***, not char*
printf("q:%s\n",q); // q is char**, not char*
printf("x:%s\n",x); // x is char***, not char*

说明%s符需要一个char *参数,或者可能是void *,const char *等,但绝不是一个char **or char ***

于 2013-07-12T00:04:58.853 回答