我正在尝试计算 char 数组中的内容直到空终止,但是每次编译时我都会得到一个大于数组的数字

Posted

技术标签:

【中文标题】我正在尝试计算 char 数组中的内容直到空终止,但是每次编译时我都会得到一个大于数组的数字【英文标题】:I am trying to count the contents in a char array till the null-termination, but each time I compile i get a number larger than my array 【发布时间】:2019-05-01 00:51:39 【问题描述】:

无论我为数组的大小设置什么值,我编写的函数都会返回一个更大的值。

我已经尝试过,while(*str++) 并从 while 循环中删除 str++,而不是现在的内容。

我正在使用 Visual Studio 2019。

int strlen(char* str)

    int i = 0;

    while (*str != '\0')
    
        i++;
        str++;

    

    return i;


int main()

    char line[1];
    char* v = line;
    char* s = new char[1];
    cout << "for s " << strlen(s) << endl;
    cout << "for v " << strlen(v) << endl;


【问题讨论】:

在字符串中查找空终止符时,在字符串中放置空终止符非常有帮助。 你的空终止符在哪里? 【参考方案1】:

您忽略了以空值结尾的字符串。您的函数正在迭代数组的末尾并导致未定义的行为。一些字符串操作函数会将 null 放在末尾,但如果你想让你的字符串有一个终端 null,你必须自己把它放在那里。

char line[2];
char* v = line;
line[0]='x';
line[1]= '\0';

【讨论】:

【参考方案2】:

你的数组的内容是未定义的。您没有用任何字符填充任何数组,更不用说使用任何空终止符了。 未定义的行为在未正确以 null 终止的字符数组上调用 strlen()

【讨论】:

以上是关于我正在尝试计算 char 数组中的内容直到空终止,但是每次编译时我都会得到一个大于数组的数字的主要内容,如果未能解决你的问题,请参考以下文章

C++ char 数组空终止符位置

初始化char数组以保存非空终止字符串[重复]

释放字符串直到空终止符

根据缓冲区长度将空终止字符数组复制到 std::string

C ++中的非空终止字符数组

什么是空终止字符串?