arrays - C中的字符数组空终止和长度
问题描述
我正在编写一个函数来检查 c 中 char 数组的长度。它需要另一个参数,该参数设置\0
检查的限制。
int string_length(char* string, int maximum_length) {
int i = 0;
while(string[i] != '\0' && i < maximum_length) {
i++;
}
return i;
}
在这个答案{}
中,提到如果使用语法创建 char 数组,则它必须以 null 结尾。我用未终止的字符数组调用上述函数,结果是 10(9 个字母 + 1)。
char not_terminated_string[] = {'m', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g' };
int length = string_length(not_terminated_string, 100);
// length is 10
我无法理解为什么会这样。
解决方案
对于下一行,C 编译器创建一个包含10 个 大小元素的数组char
并放置前9 个字符,并在最后添加一个字符串\0
分隔符。
char *a = "my string";
考虑以下行;C 编译器创建一个包含9 个 大小元素的数组char
并放置字符。最后不添加字符串分隔符。如果在第 10 个字节(字节号 9)处碰巧有一个零值,那只是偶然。
char b[] = { 'm', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g' };
语句“ a char array must be null terminate, if it is created using {} ”意味着,如果您希望能够将该 char 数组用作字符串(例如,能够在 a 中使用它printf
),那么您应该自己添加一个字符串终止字符,比如;
char b[] = { 'm', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0' };
推荐阅读
- android - 后台服务无通知
- python - CERBOT ContextualVersionConflict: (zope.interface 4.3.2 (/usr/lib/python3/dist-packages)
- dart - 如何在飞镖中值部分的地图数据结构中分配变量?
- forms - 按钮打开表格
- python - 我尝试使用带有 OpenAI gym Environment 的 pytorch 实现 DQN。但是我的episode_rewardis减少了。为什么?
- c# - 如何读取和存储以多种方式分离的多个数据?
- python - 为什么检查单词是否是字典中的键不起作用?
- c++ - 如何从可变参数模板包和使用相同模板类型的对象列表中初始化向量元组?
- c++ - 使用枚举值和可变参数模板制作 constexpr 二进制掩码
- node.js - 串流并保存