c - strlen 没有返回正确的字符数
问题描述
出于某种原因,当我输入/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));
跟/
性格有关系吗??
编辑:
这是我一次循环一个字符时缓冲区打印出来的内容:
#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()
来确定读取的长度。要打印 a ssize_t
,请转换为宽类型,例如long long
or 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 Programmer's Manual确实有“z:以下整数转换对应一个size_t
或
ssize_t
参数”,所以那里的代码可以使用printf("length = %zd\n", readIn);
2 POSIX size_t
允许使用更广泛的类型或.
推荐阅读
- typescript - 如何使用 TypeScript 正确添加到 HTMLElement?
- django - 如何使用“Django Forms”处理用户输入?
- jenkins - 为什么 Jenkins 看不到 /usr/bin 中的程序?
- go - golang 中的集合
- hibernate-search - 如何在休眠搜索中索引复合主键
- android - Hilt 依赖注入,在提供的模块内滑动模块
- vue.js - 如何将 vuedraggable 用于处理 Vuex 中嵌套数据数组的数据的嵌套组件?
- api - Flutter:异常然后页面正确构建
- unity3d - Agora.io - 是否可以实时修改视频聊天
- jenkins - Jenkins - 将作业限制在某些节点上