c - 结构中 char 数组中的奇怪字符

标签 c arrays char structure

这是我的结构(在头文件中定义):

typedef struct                          
{
    char            *name;
    char            *value;
} struct_param;

typedef struct                          
{
  char              *UID;               
  int               number;             
  char              *type;              
  char              *name;              
  struct_param      param[10];          
} struct_cmd;

原型(prototype):

struct_cmd *ParseFile(char buffer[]);

c文件中的函数:

struct_cmd *ParseFile(char buffer[])
{
struct_cmd      *cmd;
cmd = malloc(sizeof(struct_cmd));
...
if (mxmlGetFirstChild(node_msgUID) != NULL)
    cmd->UID = node_msgUID->child->value.opaque;

...
printf("Message Type :: %s | Message UID :: %s \n", cmd->type, cmd->UID);
...

return cmd;

ParseFile 中的 printf 完美运行。

现在,从主函数开始:

int main(int argc, char **argv)
{
    ...
    struct_cmd *mystruct;
    mystruct = malloc(sizeof(struct_cmd));
    mystruct = ParseFile(buf);
    printf("Message Type :: %s | Message UID :: %s \n", mystruct->type, mystruct->UID);
    ...
}

同样的printf不行。该函数返回结构,但值很奇怪......这不是值,而是奇怪的字符。

有什么想法吗? 谢谢

最佳答案

您正在对 Mini-XML 分配的数据进行复制到您自己的结构 cmd

例如,这个语句复制了一个指针,而不是实际的字符:

cmd->UID = node_msgUID->child->value.opaque;

cmd->UID仍然指的是Mini-XML分配的原始内存块。这没什么问题,只要记住,一旦您调用 mxmlDelete,此内存将被取消分配。 .这可能是您在函数 ParseFile 末尾附近所做的事情。我在这里猜测,因为您没有发布所有代码。

可能的解决方案:

  1. 制作副本,而不是副本,例如使用 strdup:cmd->UID = strdup(node_msgUID->child->value.opaque);
  2. 在释放内存之前进行所有处理。

请记住,您是在没有垃圾收集器的情况下使用普通 C 进行编程。内存管理是您的责任。

关于c - 结构中 char 数组中的奇怪字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426997/

相关文章:

c - 通过转换为结构来分配给数组

php - 在 PHP (PDO) 中了解 MySQL 的内存使用情况

C:将嵌套结构数组传递给函数

c - 是否可以用c语言编程在谷歌中搜索某些内容并将第一个搜索结果显示为输出?

c stdin 二维数组文件输入

c - 返回计算翻译的程序的结构

javascript - 递归 Python 函数转换为 Javascript 不起作用,数组问题

PHP array_multisort 没有正确排序第二个数组

c - 试图找到字符串中某些字符的频率,但结果相去甚远

将 char 指针数组转换为小写 C