在结构上遇到问题的地方包括一个灵活的数组成员

时间:2019-05-14 20:00:02

标签: c++ pointers flexible-array-member

很抱歉有任何错误。我找不到任何表达式来搜索此问题。

我有一个包含这样的结构的c头文件:

struct foo {
     int k;
     int l;     
     char name[];
};

还有一个指针,它保存分配给其他地方的内存的地址。

#include <iostream>
using namespace std;
char* mem_ptr; // initialized somewhere else
int some_offset = 128; // arbitrary value
int main () {

   char *name = "some string";
   int k = 23;
   int l = 24;
   foo* p;
   // p points somewhere in allocated area
   // say it is: 
   p = (foo*) (mem_ptr + some_offset);
   p->k = k; // OK
   p->l = l; // OK

   // tried three of them 
   // none of them worked
   p->name = name; // COMPILE ERROR
   for (int i = 0; i < 12; ++i)p->name[i]=name[i]; // CORE DUMPED
   p->name = new char(12); // COMPILE ERROR

}

当我尝试设置成员时,整数(实际上是除flexible-array-member以外的每个成员)都被写入,没有任何问题。但是我找不到任何设置char数组的方法。

ps:已保证分配的区域足够,并且我不能更改struct。我必须按原样处理。

如何正确处理?

1 个答案:

答案 0 :(得分:1)

我发现了问题。 谢谢您的帮助!

我误认为是循环。我在for循环的char数组的边界上犯了错误,因为它超出了名称,而不是p-> name,所以引发了核心转储。更正后,效果很好!