如何在嵌套结构中访问指针

时间:2015-06-24 11:56:33

标签: c string pointers struct char

假设我在C编程语言中有这样的代码

typedef struct up {
    char *str;
} up;

typedef struct up_cont{
    up at;
}up_cont;

我定义了up_cont real;。我完成了所有的分配!

现在我想将"Hello"存储在字符串中。我正在尝试

 up_cont real;
*(real.at.str) = "Hello";

它不起作用!!

还请建议如何打印!!

3 个答案:

答案 0 :(得分:2)

假设您的typedef如下所示

typedef struct up_cont{
    up at;
}up_cont;

(我相信上述片段的拼写错误更多)

问题的答案是,str本身就是一个指针。只需使用

 real.at.str = "Hello";

编辑:

  

还请建议如何打印!!

正常打印任何其他字符串的方式。使用

 printf("str contains %s\n", real.at.str);

您可以阅读有关printf() here

的更多信息

FOOTNOTE:

FWIW,如果你使用一个字符串文字指向一个指针,它将是只读的,你不能改变内容。如果你想要一个可修改的字符串,你需要
1。使用malloc()或系列来动态分配内存 2。使用strcpy()字符串文字复制到已分配的内存

答案 1 :(得分:0)

typedef struct up_cont{
    up at;
};

在C中你没有在这里输入任何东西。 你的意思是:

typedef struct up_cont{
    up at;
} up_cont;

然后访问它:

up_cont *p = /* ... */;
p->at.str = "hello";

正如其他一些人所提到的,在C ++中,你需要在你的结构中有一个const char *成员来指向一个字符串文字(char *在C中是正常的。)

答案 2 :(得分:0)

访问嵌套结构成员的语法与您一样:real.at.str

无效的是您要取消引用real.at.str。作业

  real.at.str = "Hello";
通过将左侧指定为字符串文字中第一个字符的地址,

将起作用。

请记住,修改字符串会产生未定义的行为

  real.at.str[0] = 'B';

因为它试图用字符"Hello"覆盖字符串文字'B'的第一个字符(实际上是编译时常量)。