strcpy:在union中使用char **变量作为参数

时间:2013-10-03 09:38:22

标签: c string pointers struct strcpy

您好我正在尝试将字符串复制到“word”变量中。 strcpy需要char *类型,而我的“word”变量是char **类型。 我该如何实现? 我试过跟随,但它不起作用。

struct command
{
  enum command_type type;
  char *input;
  char *output;
  union
  {
    struct command *command[2];
    char **word;
  } u;
};


main(){
...
char* charPtr = "abc";
struct command* cmdPtr;
strcpy(cmdPtr->u.word,charPtr);
...
}

1 个答案:

答案 0 :(得分:4)

struct command
{
    ...
    union
    {
        ...
        char **word;          // <-- requires memory to be associated explicitly 
    } u;
};
...
char* charPtr = "abc";
struct command* cmdPtr;           // <-- uninitialized variable
strcpy(cmdPtr->u.word,charPtr);   // <-- undefined behavior

cmdPtr未初始化,这意味着取消引用此指针已经调用 未定义的行为 。即使您要为此struct分配内存,也必须为word成员分配内存,否则strcpy会尝试将字符串复制到无效内存,从而产生未定义的行为试。

此外,您的main的返回值未定义,word被声明为char**,而strcpy期望char*类型的第一个参数。例如,您可以这样做:

struct command cmd;
char myBuffer[255];
char* pBuffer = &myBuffer[0];
cmd.u.word = &pBuffer;
strcpy(*cmd.u.word, "abc");
printf("%s", *cmd.u.word);

或者不是让word指向本地指针:

cmd.u.word = malloc(sizeof(char*));
*cmd.u.word = &myBuffer[0];

...但是一旦你开始动态分配东西,要小心正确地释放/解除分配它。