我知道缓冲区溢出是使用 C 样式字符串(字符数组)的一种潜在危险。如果我知道我的数据适合我的缓冲区,是否可以使用它们?我需要注意 C 风格字符串固有的其他缺点吗?
EDIT:这是一个接近我正在做的事情的例子:
char buffer[1024];
char * line = NULL;
while ((line = fgets(fp)) != NULL) { // this won't compile, but that's not the issue
// parse one line of command output here.
}
此代码从使用创建的 FILE 指针获取数据popen("df")
命令。我正在尝试运行 Linux 命令并解析其输出以获取有关操作系统的信息。以这种方式将缓冲区设置为任意大小是否有任何错误(或危险)?
C 字符串有一些缺点:
- 获取长度是一项相对昂贵的操作。
- 不允许嵌入 null 字符。
- 字符的符号性是由实现定义的。
- 字符集是实现定义的。
- char 类型的大小是实现定义的。
- 必须单独跟踪每个字符串的分配方式以及如何释放它,或者即使它需要释放。
- 无法将字符串的一部分引用为另一个字符串。
- 字符串不是不可变的,这意味着它们必须单独同步。
- 字符串不能在编译时进行操作。
- Switch case 不能是字符串。
- C 预处理器无法识别表达式中的字符串。
- 无法将字符串作为模板参数传递 (C++)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)