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
は初期化されていません。つまり、このポインターを逆参照すると、未定義の動作が既に呼び出されます。thisstruct
にメモリを割り当てる場合でも、word
メンバーにもメモリを割り当てる必要があります。そうしないstrcpy
と、文字列を無効なメモリにコピーしようとし、未定義の動作が再び発生します。
さらに、 your の戻り値はmain
定義されておらず、 whileは type の最初の引数を期待する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];
...しかし、動的に割り当てを開始したら、適切に解放/割り当て解除するように注意してください。