请告知我以下输出:
int main()
{
char ***x = "jjhljlhjlhjl";
char ***q = "asddfwerwerw";
**q = **x;
printf("x:%s\n",x);
printf("q:%s\n",q);
}
输出:1分段错误
答案 0 :(得分:3)
这就是你应该拥有的:
#include <stdio.h>
int main(void) {
char *x = "jjhljlhjlhjl";
char *q = "asddfwerwerw";
q = x;
printf("x:%s\n",x);
printf("q:%s\n",q);
return 0;
}
如果要初始化字符串,请使用char *x
不要使用***x
。这意味着指向指向char的指针的指针。
希望有所帮助。
答案 1 :(得分:2)
“分段错误”不是输出,它表示您的程序已崩溃。
这应该不足为奇,因为字符串文字是char*
,而不是char***
。试图对这些指针进行双重去除是未定义的行为,因为它将字符串文字的内容重新解释为指向char
的指针。这就是导致崩溃的原因。
您可以按照以下方式修改您的计划,使其合法:
int main() {
char *x = "jjhljlhjlhjl";
char tmp[] = "asddfwerwerw";
char *q = tmp;
*q = *x;
// This will produce an output that should be easy to explain:
printf("x:%s\n",x);
printf("q:%s\n",q);
}