作者:cl有倪幸福 | 来源:互联网 | 2022-11-20 16:55
出于某种原因,当我输入/bin/echo
后输入时,strlen在这里说14应该是10.我似乎无法弄清楚为什么.
char buffer[BUF_SIZE]; // BUF_SIZE = 100
ssize_t readIn = read(STDIN_FILENO, &buffer, BUF_SIZE);
printf("strlen=%lu\n", strlen(buffer));
这与/
性格有关吗?
编辑:
当我一次遍历一个char时,这就是缓冲区打印出来的内容:
#0: c=/ / hex=2f
#1: c=b / hex=62
#2: c=i / hex=69
#3: c=n / hex=6e
#4: c=/ / hex=2f
#5: c=e / hex=65
#6: c=c / hex=63
#7: c=h / hex=68
#8: c=o / hex=6f
#9: c=
/ hex=a
#10: c= / hex=5
#11: c=? / hex=ffffff90
#12: c=? / hex=ffffffff
#13: c= / hex=7f
chux - Reins..
7
strlen()
用于确定字符串的长度.在C中,字符串末尾有一个空字符,否则它不是字符串.除非读取的数据包含空字符,否则它不是字符串.
而是使用返回值read()
来确定读取的长度.要打印a ssize_t
,强制转换为宽类型,例如long long
或intmax_t
(更好),因为ssize_t
缺少指定的打印说明符.1 2
注意:&
不需要删除缓冲区.
char buffer[BUF_SIZE]; // BUF_SIZE = 100
// ssize_t readIn = read(STDIN_FILENO, &buffer, BUF_SIZE);
ssize_t readIn = read(STDIN_FILENO, buffer, BUF_SIZE);
// printf("strlen=%lu\n", strlen(buffer));
printf("length = %lld\n", (long long) readIn);
// or
printf("length = %jd\n", (intmax_t) readIn);
1 Linux程序员手册确实有"z:以下整数转换对应于a size_t
或
ssize_t
参数",因此代码可以使用printf("length = %zd\n", readIn);
2 POSIX允许更宽的类型或带符号的模拟 size_t
.
1> chux - Reins..:
strlen()
用于确定字符串的长度.在C中,字符串末尾有一个空字符,否则它不是字符串.除非读取的数据包含空字符,否则它不是字符串.
而是使用返回值read()
来确定读取的长度.要打印a ssize_t
,强制转换为宽类型,例如long long
或intmax_t
(更好),因为ssize_t
缺少指定的打印说明符.1 2
注意:&
不需要删除缓冲区.
char buffer[BUF_SIZE]; // BUF_SIZE = 100
// ssize_t readIn = read(STDIN_FILENO, &buffer, BUF_SIZE);
ssize_t readIn = read(STDIN_FILENO, buffer, BUF_SIZE);
// printf("strlen=%lu\n", strlen(buffer));
printf("length = %lld\n", (long long) readIn);
// or
printf("length = %jd\n", (intmax_t) readIn);
1 Linux程序员手册确实有"z:以下整数转换对应于a size_t
或
ssize_t
参数",因此代码可以使用printf("length = %zd\n", readIn);
2 POSIX允许更宽的类型或带符号的模拟 size_t
.