我今天一直在摆弄 C,当我注释掉这段代码中的第三个缓冲区时,我不明白输出的差异:
#include <unistd.h>
#include <string.h>
#include <stdio.h>
void main() {
unsigned char letters[10];
memset(letters, 0x00, 10);
memset(letters, 0x41, 10);
printf(letters);
printf(" Total buffer len: %d bytes\n",strlen(letters));
char nletters[10];
memset(nletters, 0x00, 10);
memset(nletters, 0x42, 10);
printf(nletters);
printf(" Total buffer len: %d bytes\n",strlen(nletters));
int nums[10];
memset(nums, 0x00, 10);
memset(nums, 0x43, 10);
printf(nums);
printf(" Total buffer len: %d bytes\n",strlen(nums));
return 0;
}
不同之处在于 nums 缓冲区周围的注释被删除:
AAAAAAAAAA�7ǝ�U Total buffer len: 16 bytes
BBBBBBBBBBAAAAAAAAAA�7ǝ�U Total buffer len: 26 bytes
并保留缓冲区:
AAAAAAAAAA Total buffer len: 10 bytes
BBBBBBBBBBAAAAAAAAAA Total buffer len: 20 bytes
CCCCCCCCCC��U Total buffer len: 14 bytes
我不明白的是:
注释掉第三个缓冲区如何影响其他缓冲区的大小?
缓冲区末尾的额外字节是什么以及如何丢失/管理它们(如果我选择连接缓冲区)?
为什么当我选择是否注释第三个缓冲区时,打印缓冲区大小和初始化大小的差异不一致?
缓冲区2应该是10字节,为什么是20字节?我不希望是20个,我只要求10个。我认为这不无道理。