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];
...但是一旦你开始动态分配东西,也要小心正确地释放/释放它。