请就以下输出告诉我:
int main()
{
char ***x = "jjhljlhjlhjl";
char ***q = "asddfwerwerw";
**q = **x;
printf("x:%s\n",x);
printf("q:%s\n",q);
}
输出:1 分段错误
这是你应该拥有的:
#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
Don't use ***x
。这意味着指向指向char的指针的指针。希望有帮助。
“Segmentation fault”不是输出,它表明您的程序已经崩溃。
这应该不足为奇,因为字符串文字是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);
}