gpt4 book ai didi

c - strlen 没有返回正确的字符数

转载 作者:太空宇宙 更新时间:2023-11-04 05:06:28 24 4
gpt4 key购买 nike

出于某种原因,当我输入 /bin/echo 后跟 enter 时,这里的 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));

是不是和/字符有关??

编辑:

这是我一次遍历一个字符时缓冲区打印出的内容:

#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

最佳答案

strlen() 用于确定一个字符串的长度。在 C 语言中,字符串 的末尾有一个空字符,否则就不是字符串。除非读取的数据包含空字符,否则它不是字符串。

相反,使用 read() 的返回值来确定读取的长度。要打印 ssize_t,请转换为宽类型,例如 long longintmax_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 Programmer's Manual确实有“z:以下整数转换对应于 size_tssize_t argument", 所以那里的代码可以使用 printf("length = %zd\n", readIn);

2 POSIX 允许更宽的类型或 signed analog of size_t .

关于c - strlen 没有返回正确的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54282953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com