在结构中访问char指针

时间:2011-02-02 17:33:57

标签: c++ linux

typedef struct fred {
  char mytype[41];
  char* myremark;
} fred_t;

使用该结构的实例

fred_t* mystruct;

我可以打印mytype

fprintf (stdout, "%s\n", mystruct->mytype);

但我没有得到以类似方式打印myremark的语法。

(这是我正在修改的旧代码。)

6 个答案:

答案 0 :(得分:1)

myremark只是一个指针。它并没有指向任何东西,从它的外观来看,它也没有被初始化,所以你只是得到一些随机的内存块。

mytype已分配存储空间(准确地说是41个字节),因此您可以获得所需的结果。 myremark没有任何意义。

答案 1 :(得分:1)

如果实例已正确初始化(即myremark指向有效字符串),则可以完全相同的方式打印它。

顺便说一下,要将字符串打印到stdout,您只需使用puts

puts(mystruct->mytype);
puts(mystruct->myremark);

答案 2 :(得分:0)

fprintf (stdout, "%s\n", mystruct->myremark);

答案 3 :(得分:0)

如果fprintf (stdout, "%s\n", mystruct->myremark);正确地以NULL结尾,则

myremark应该有效。

答案 4 :(得分:0)

您可以像使用数组一样使用%s修饰符。我想知道你是否曾初始化myremark指向一个有效的字符串。

答案 5 :(得分:0)

我正在接口的API正在记录中。每个电话都是简单记录的,但是关于eveything如何挂起的指导很少。有一小部分示例代码。最后,我通过搜索“vector”(不要问)在一个不相关的示例代码中找到了一个类似的例子。有一个两阶段的过程,第一阶段确定了结构的实例,但是char *指针所指向的内存直到第二次API调用引用已经识别的结构之后才被填充(效率只是得到了用户的内容)想要 - 这比我提出的简化插图要大得多。我错过了第二次电话会议。

几乎每个回答的人都会询问指针是否指向实际的字符串。他们没事,无论我如何改变我的语法,在第二次电话之后都找不到任何东西。感谢所有回复的人