1

このようにフォーマットされた文字列をあるプログラムから別のプログラムに送信しています: number lastname firstname middlei ID GPA.

受信プログラムは正しい文字列を認識し、この文字列はバッファーに格納されます。文字列はトークン化され、番号は switch ステートメントで使用されます。対応するケースのコードを以下に示します。

tok = strtok( arg, " " );
printf( "the first token is %s\n", tok );
memcpy( ptr->student.lname, tok, 10 );
tok = strtok( NULL, " " );
memcpy( ptr->student.fname, tok, 10 );
tok = strtok( NULL, " " );
ptr->student.initial = *tok;
tok = strtok( NULL, " " );
sscanf( tok, "%lu", &ptr->student.SID );
tok = strtok( NULL, " " );
sscanf( tok, "%f", &ptr->student.GPA );
// few more pointer and location initializations...
printf( "lu %s %s %c %f\n", ptr->student.SID, ptr->student.lname,
    ptr->student.fname, ptr->student.initial, ptr->student.GPA );

入力文字列は次のとおりです。5 lastnamereallylong,firstnamereallylong,X,1234,4.0

最初のプログラムは次のように短縮されます。5 lastnamere firstnamer X 1234 4.0

2 番目のプログラムの出力は次のとおりです。

the first tok is lastnamere
1234 lastnamereXfirstnamer firstnamer X 4.000000

誰かがここで何が起こっているのかを理解するのを手伝ってもらえますか? 正しく使用していないことは理解できmemcopyましたが、それによって元の情報の順序が変わるとは思いませんでした。

4

1 に答える 1