有时候会对 read 和 fscanf 等读入内容到缓冲区, 在输入内容大于缓冲区时, 是否会自动将最后一个字节设置为 '\0' 犹豫.
在这里测试下.
#include <stdio.h>
#define LEN 3
int main(int argc, char *argv[])
{
char buf[LEN];
char buf2[LEN] = {'\0'};
read(0, buf, LEN);
printf("%c\n", buf[LEN-1]);
printf("buf:%s\n", buf);
printf("buf2:%s\n", buf2);
return 0;
}
输入: abcd
输出:
c
buf:abc??
buf2:
可见read并不会设置最后一字节内容为 '\0', 输出出现乱码.
下面测试 scanf
#include <stdio.h>
#define LEN 3
int main(int argc, char *argv[])
{
char buf[LEN];
char buf2[LEN] = {'\0'};
fgets(buf, LEN, stdin);
printf("%c\n", buf[LEN-1]);
printf("buf:%s\n", buf);
printf("buf2:%s\n", buf2);
return 0;
}
输入: abcd
输出:
buf:ab
buf2:
可见 scanf之类的字符串处理函数会自动将缓冲区的最后一字节设置为 '\0'.
这些其实都是一些很基本的知识, 但因为较久不读书和以前没有细心, 竟不是很清楚了.看来得反思了.