【发布时间】:2017-11-28 08:26:14
【问题描述】:
我遇到过这个问题:我实现了一个将字符串转换为结构的函数。我有这个结构:
typedef struct {
unsigned a, b;
unsigned c, d;
} struct_t;
函数的标题如下:
struct_t * string_to_struct (char * g)
\retval p 指向创建的新结构的指针; \retval 如果转换不成功,则为 NULL。转换对于诸如“5 8 10 10”之类的字符串不成功(我收到segmentation fault 错误),但对于诸如“5 6 6 7”或“4 5 6 8”之类的字符串却是成功的。我认为问题在于为指向结构 p 的指针分配内存。
我想过先用这种方式为p分配内存:
p = (struct_t*)malloc(sizeof(struct_t));
然后我考虑为 p 重新分配内存,以便为字符串腾出空间(有些字符串大约 8 个字节,一切正常,但如果字符串大约 10 个字节,我会得到一个 segmentation fault,因为通过分配上面 p 的内存我只为 8 个字节腾出空间),使用函数realloc() 来扩大放置结构的内存并使其成为字符串的大小,但我不知道如何正确执行。
这是我尝试实现该功能的方式,而不是使用realloc():
struct_t * string_to_struct (char * g){
struct_t * p; /* pointer to new structure*/
int n;
n = sizeof(g);
if(sizeof(g) > sizeof(struct_t))
p = (struct_t*)malloc(n*sizeof(struct_t));
else
p = (struct_t*)malloc(sizeof(struct_t));
if(g[0] == '\0' ) /* trivial */
return NULL;
else
(*p).a = g[0];
(*p).b = g[2];
(*p).c = g[4];
(*p).d = g[6];
if((*p).a <= (*p).c && (*p).b <= (*p).d) /* check, the elements of the structure must satisfy those relations.*/
return p;
else
return NULL; /* convertion not successful */
}
但它不起作用。提前感谢您的帮助。
【问题讨论】:
-
没有 struct_t 的定义,没有语言标签(C 或 C++),没有代码,没有真正的问题。很抱歉,这真的不清楚,可能很快就会关闭。
-
分配(除了不必要的演员)很好。该错误很可能在解析中。显示
string_to_struct函数的完整主体。 -
sizeof(g)与strlen(g)非常不同 -
确认。
(*p).a太丑了,它有自己的特殊符号:p->a -
鉴于
char *g,你认为你从sizeof(g);得到了什么?
标签: c string structure realloc