0

您好我正在尝试将字符串复制到“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);
...
}
4

1 回答 1

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**whilestrcpy需要 type 的第一个参数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];

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

于 2013-10-03T09:53:01.967 回答