如果使用char[]来声明char数组,那么编译器会自动计算后面的字面量字符数,再加上一个空字符,作为它的长度。实际上这个数组最后一位被编译器强行加上了\0:
#include <stdio.h> #include <unistd.h> #include <fcntl.h> #define BUFFSIZE 4096 int main(void) { int fd_1 = open("./test_1.txt", O_RDWR); //为了改变fd_1的偏移值,输出一下fd_1的内容 char str[BUFFSIZE]; ssize_t n; //往test_1.txt写入一些信息 char str_2[] = "|append"; n = write(fd_1, str_2, sizeof(str_2)); //最终的输出结果是"|append\0",在文本中,\0被当成了空格去显示 lseek(fd_2, 0, SEEK_SET); while((n = read(fd_1, str, BUFFSIZE)) > 0){ printf("%s\n", str); } }
给数组加上长度,就可以解决上述"问题":
#include <stdio.h> #include <unistd.h> #include <fcntl.h> #define BUFFSIZE 4096 int main(void) { int fd_1 = open("./test_1.txt", O_RDWR); //为了改变fd_1的偏移值,输出一下fd_1的内容 char str[BUFFSIZE]; ssize_t n; //往test_1.txt写入一些信息 char str_2[7] = "|append"; n = write(fd_1, str_2, sizeof(str_2)); //最终的输出结果是"|append" lseek(fd_2, 0, SEEK_SET); while((n = read(fd_1, str, BUFFSIZE)) > 0){ printf("%s\n", str); } }
原文:https://www.cnblogs.com/yiyide266/p/11615789.html