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