0

こんにちは、文字列を「単語」変数にコピーしようとしています。strcpy には char* 型が必要で、私の「単語」変数は 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は初期化されていません。つまり、このポインターを逆参照すると、未定義の動作が既に呼び出されます。thisstructにメモリを割り当てる場合でも、wordメンバーにもメモリを割り当てる必要があります。そうしないstrcpyと、文字列を無効なメモリにコピーしようとし、未定義の動作が再び発生します。

さらに、 your の戻り値はmain定義されておらず、 whileは type の最初の引数を期待するwordように宣言されています。たとえば、次のことができます。char**strcpychar*

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 に答える