char指针和printf 2

时间:2013-09-25 01:43:03

标签: c pointers printf

请告知我以下输出:

int main() 
{

  char ***x = "jjhljlhjlhjl";  

  char ***q = "asddfwerwerw";

  **q = **x;  

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

}

输出:1分段错误

2 个答案:

答案 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);
}