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

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

本文关键字:数组 数字 一个 我的 编译 计算 char 终止 null 直到      更新时间:2023-10-16

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

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

我正在使用Visual Studio 2019。

int strlen(char* str)
{
int i = 0;
while (*str != '')
{
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;
}

您忽略了 null 终止字符串。您的函数正在迭代数组的末尾并导致未定义的行为。一些字符串操作函数会将 null 放在末尾,但如果您希望字符串具有终端 null,则必须自己将其放在那里。

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

数组的内容未定义。 您不会用任何字符填充任何数组,更不用说使用任何 null 终止符了。 对未正确以 null 结尾的字符数组调用strlen()未定义的行为