0

私は(明らかに)フォルダ、ファイルなどを含む単純なファイルシステムに取り組んでいます.

(簡略化されたバージョンの) フォルダーは、RAM にある間、次のような構造で表されます。

typedef struct{
     char label[20];
     unsigned int id;
     t_node contents[50];
 } folder;

さて、私は明らかにラベルに名前を含む生のバイト文字列を含めたいと思っています(末尾0のない生の文字列の方が良いですが、それは私が喜んで犠牲にします)。

いいえ、構造体を作成して使用する方法は次のとおりです。

folder* myFolder = (folder *) malloc(sizeof(folder));
myFolder->label = "name";

//Which doesn't work, if I try this:

char name[20] = "name";
myFolder->label = name;

//this too, doesn't work.

エラー メッセージには、「タイプ 'char *' からタイプ 'char[20]' に割り当てるときに互換性のないタイプです」と表示されます。私は理解していますが、解決方法がわかりません。

前もって感謝します

4

4 に答える 4

4

使用strncpy():

char name[20] = "name";
strncpy(myFolder->label, name, sizeof(myFolder->label) - 1);
myFolder->label[sizeof(myFolder->label) - 1] = 0;
于 2012-11-07T16:11:55.677 に答える
2

使ってみてくださいstrncpy():

strncpy( myFolder->label, "name", 20 );

それ以外の

myFolder->label = "name";

代入演算子を使用して配列を埋めることはできません。この場合、「name」の右側が char ポインターに解決されます。

また、定数 20 を、値が何であるかを示す定義済みの定数 (つまり、MAX_FOLDER_LABEL_LEN) に置き換えることをお勧めします。

于 2012-11-07T16:12:50.733 に答える
1

strcpyを使用する必要があります

strcpy(myFolder->label, "name");
于 2012-11-07T16:11:57.283 に答える
1

配列は変更可能な左辺値ではないため、値を割り当てることはできません。いくつかの解決策があります:

  • labelへのポインタとして宣言しますchar
  • strcpy(または同等のもの)を使用してください。
于 2012-11-07T16:12:48.347 に答える