【问题标题】:char pointer and printf 2char 指针和 printf 2
【发布时间】:2013-09-25 01:43:02
【问题描述】:

请就以下输出给我建议:

int main() 
{

  char ***x = "jjhljlhjlhjl";  

  char ***q = "asddfwerwerw";

  **q = **x;  

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

}

输出:1 个分段错误

【问题讨论】:

  • 忠告:你不懂指针。
  • OT:main() 错过了 return <int value>; 声明。

标签: c pointers printf


【解决方案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 不要使用***x。这意味着指向指向char的指针的指针。 希望对您有所帮助。

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

    • 嗨,如果它定义为 char***x,你能告诉我字符串如何存储在“x”中吗?不是 (x -> address1 -> address2 -> address3 "string") 吗?
    • @user1998844 定义为char*** 的是x,而不是字符串。该字符串始终为char*,因此您的分配是非法的。打开所有警告以查看编译器抱怨它。
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多