0

簡単な質問...私は前もって多くの値を知っていて、後で他の値を追加する必要がありますが、なぜこれは "direc [i] = {L" Jim "、L" Smith"}の行でコンパイルされないのですか? ;" どこで値を知っていますか?

struct NARRAY
{
TCHAR *sFName;
TCHAR *sLName;
};

void main()
{
struct NARRAY direc[1000];

DWORD i = 0;

direc[i].sFName = calloc(512,sizeof(TCHAR));
direc[i].sLName = calloc(512,sizeof(TCHAR));

direc[i] = {L"Jim",L"Smith"};

}
4

3 に答える 3

1

クラシックCには構造体リテラルがありません。この構文は、変数を初期化するとき、つまりその定義の一部としてのみ使用できます。

ただし、C99では複合リテラルが導入されました。これにより、次のように記述できます。

direc[i] = ((struct NARRAY) { L"Jim", L"Smith" });
于 2012-06-27T11:02:49.730 に答える
1

構造体/配列の初期化を使用しようとしています。これは、変数を宣言する場合にのみ許可されます。各メンバーを自分で初期化する必要があります。

direct[i].sFname = L"Jim";
direct[i].sLname = L"Smith";

もちろん、これらのメンバーを配列内の一部のエントリに動的に割り当て、一部のエントリに静的に(上記の例のように)割り当てる場合、動的に割り当てられたかどうかを実際に知る方法はありません。これにより、問題が発生します。それらのポインタを解放するために来てください。次にstrdup、(またはむしろ)_tcsdupを使用できます。TCHAR

direct[i].sFname = _tcsdup(L"Jim");
direct[i].sLname = _tcsdup(L"Smith");
于 2012-06-27T11:10:23.073 に答える
0

memcpyまたはなどの関数を使用しstrncpyて、割り当てられたメモリにデータをコピーする必要があります。

memcpy(direc[i].sFName, "Jim", 3);
direct[i].sFName[3] = '\0';
于 2012-06-27T11:03:15.837 に答える