首页 > 解决方案 > 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

我无法理解为什么会这样。

标签: arrayscchar

解决方案


对于下一行,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' };

推荐阅读