1

私は構造体を持っています

typedef struct
{
  my ints
  and char's
} structname;

.c内部のサーバーファイルでmain()

structname Header;

私は電話していますfunction(Header);

別の.cファイルを見る

そして、ヘッダーにegを入力しますstrcpy(Header.Name1,pch);

gdbデバッグに使用したように、正しく入力されます

(gdb) p Header.Name1
$5 = "Bilka\000\332\326\377\177\000\000\001\000\000\000\000\000\000\000\b]\022\"E\177\000\000p\356\332\326\377\177\000\000\034\000\000\000\000\000\000\000\t\000\000\000\000"

この関数が終了して返さTRUEれた後、server.c の次の行に戻りますが、Header.Name1 で印刷すると、空白のヘッダーが表示されます。

4

2 に答える 2

7

C の関数引数は値渡しです。したがって、関数のシグネチャが次のようになっている場合:

foo function(structname Header);

関数が呼び出されたときに引数がコピーされることを意味します。次に、その一時コピーを関数内で変更しますが、元のオブジェクトは変更されません。代わりに、構造体へのポインターを関数に渡したい場合があります。

foo function(structname * Header)
{
  //...
  strcpy(Header->Name1, pch);
}

// ...
structname Header;
function(&Header);
printf("%s\n", Header.Name1);
于 2012-05-04T10:45:07.557 に答える
1

C 関数は値渡しであるため、 を呼び出すときは、構造体のコピーfunction(Header);を渡してそれを変更し、構造体へのポインターを他の関数に渡す必要があります。

function(&Header);
于 2012-05-04T10:45:53.117 に答える