0

请就以下输出告诉我:

int main() 
{

  char ***x = "jjhljlhjlhjl";  

  char ***q = "asddfwerwerw";

  **q = **x;  

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

}

输出:1 分段错误

4

2 回答 2

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 Don't use ***x。这意味着指向指向char的指针的指针。希望有帮助。

于 2013-09-25T01:52:52.257 回答
2

“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);
}
于 2013-09-25T01:50:10.773 回答