私は、文字ポインタとその文字列を入力するために渡される関数を渡すプログラムを持っている。しかし、私はデータが切り捨てられていることに気づいた。 gdbを使って調べると、ポインタのサイズに違いがあるようです。関数の呼び出し時にポインタのサイズが変更される(gdbを使用してチェックされる)
int main(void) {
unsigned char *test_char;
test_char = (unsigned char *)malloc(sizeof(unsigned char) * 6);
memset(test_char, 0x00, sizeof(unsigned char) * 6);
functionToPopulate(test_char);
}
void functionToPopulate(unsigned char *test_char) {
snprintf(test_char, sizeof(test_char), "%u%s%u", 20, ":", 30);
}
この場合、memsetの前にgdbを使用し、test_charの値を出力しました。それは言う(6)。 snprintf実行中と実行後に、私はgdbを使ってtest_charの値を出力しました。それは言う(4)。しかし、戻ってくると、値は(6)と再び表示されます。ただし、データは既に切り捨てられています。 「20:30」ではなく「20:」となります。
ポインタのサイズは、ポインターのサイズと同じではありません。ポインタのサイズは変更できません。 – jamesdlin