您好我正在尝试将字符串复制到“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);
...
}
答案 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];
...但是一旦你开始动态分配东西,要小心正确地释放/解除分配它。