【问题标题】:How to access pointer within a nested structure如何访问嵌套结构中的指针
【发布时间】:2015-06-24 11:56:32
【问题描述】:

假设我有这样的 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";

它不工作!

还请建议如何打印!!

【问题讨论】:

  • 只要是real.at.str = "Hello";如果是C。

标签: c string pointers struct char


【解决方案1】:

假设您的 typedef 如下所示

typedef struct up_cont{
    up at;
}up_cont;

(我相信以上 sn-p 的错字更多)


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

 real.at.str = "Hello";

编辑:

还请建议如何打印!!

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

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

你可以阅读更多关于printf()here的信息


脚注:

FWIW,如果您使用将字符串文字分配给指针,它将是只读的,您无法更改内容。如果你想要一个可修改的字符串,你需要
1.使用malloc() 或家庭动态分配内存
2.使用strcpy()字符串文字复制到分配的内存中

【讨论】:

  • 这是not valid in C++,因为字面量是const char*
  • @CoryKramer 在C 中有效。我认为typedef 无效(用法)C++ 样式。我认为这段代码更多的是C
  • 公平地说,我已经编辑了我的 -1,我只是想澄清一下,因为 OP 标记了 C++。我删除了他们的 C++ 标签以避免将来如果其他人看到这篇文章时产生混淆。
  • @CoryKramer 你说得很对,大多数人认为CC++ 可以互换,通过将printf() 更改为cout<<C 代码变为C++(别笑,我个人认识这样的人。)
  • 我只是在玩和学习!!你能告诉我是否想在 up 结构中创建一个字符串数组。如何为行分配内存?
【解决方案2】:
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 中是可以的)。

【讨论】:

  • 是的,我错了!!
【解决方案3】:

访问嵌套结构成员的语法如您所见:real.at.str

无效的是您取消引用real.at.str。任务

  real.at.str = "Hello";

可以通过将左侧指定为字符串文字中第一个字符的地址来工作。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2012-09-23
    • 2023-03-10
    相关资源
    最近更新 更多