假设我在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";
它不起作用!!
还请建议如何打印!!
答案 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'
的第一个字符(实际上是编译时常量)。