私はプログラムのシェルを与えられており、いくつかの機能を記入する必要があります。strncopy n文字以上をコピーする
私は与えられた2つの構造体を自動的に作成し、定義しなければならない関数に渡します。
typedef struct {
char data[20];
} msg;
typedef struct {
int seqnum;
int acknum;
int checksum;
char payload[20];
} pkt;
は、私はこの機能foo
を定義する必要があり、そのようにそれを作成していると言う:その関数が呼び出されると
void foo(msg message) {
printf("%s\n", message.data);
}
、それはddddddddddddddddddddôÑ@<úHn½*Ìå«*¤ú¤F«*
を出力します。私が間違っていない限り、20文字しか保持できないはずですか?私は実際にmsg
を作成していません。
msg.data
をpkt.payload
にコピーすると、それは見知らぬ人になります。
void foo(msg message) {
pkt packet;
strncpy(packet.payload, message.data, sizeof(packet.payload));
printf("%s\n", message.data);
printf("%s\n", packet.payload);
}
message.data前と同じように出力しますが、eeeeeeeeeeeeeeeeeeee<úeeeeeeeeeeeeeeeeeeee²[email protected]<úHn½*Ìå«*¤ú¤F«*
をpacket.payload出力します。なぜ20文字以上ですか?
これはCを使用した初めてのことですので、これが明らかな場合は私を許してください。しかし、私は言語に問題があるので、割り当ての中核に到達することすらできません。
あなたはそれがヌルで終了ではないかもしれない20バイトのフィールドで仕事をしたい場合は、 ''あなたのprintf'フォーマット文字列の%.20s'を使用してください。 –