我正在研究strlen()
C中的函数,我看到了一个函数,这个函数返回了diffirent值.如果数组容量已满,则返回错误的结果.如果数组的容量未满,则返回true结果.我问的是什么原因?
非常感谢所有读者.
那就是功能
int myStrlen(char *s) { char *start; start = s; while (*s != 0) { ++s; } return s - start; }
和主要的
int main() { char x[4] = "What"; printf("%d\n", myStrlen(x)); return 0; }//Output: 21
其他主要的
int main() { char x[5] = "What"; printf("%d\n", myStrlen(x)); return 0; }//Output: 4
cadaniluk.. 6
由于尾随空字节,字符串"What"
的类型char[5]
.定义用char[4]
截断字符串并削减空字节.
由于在这种情况下缺少null终止符,因此myStrlen
调用未定义的行为.
只是用
char str[] = "What";
在实际代码中没有任何明确的数组长度.
而且,正如@Olaf在对你的问题的评论中所说:C没有方法而是功能!
方法在C++中可用,它们是虚函数的别名,在Java中(我没有任何线索).
Stroustroup先生在他的"C++编程语言第 4 版" 一书中介绍了C++中的方法,第20.3.2章:
虚拟成员函数有时称为方法.
P.P... 5
有了这个功能
int main() { char x[4] = "What"; printf("%d\n", myStrlen(x)); return 0; }//Output: 21
中没有空终结符x
.所以它未定义为myStrlen()
循环,寻找null终止符,任何结果都是可能的.
赋值本身是有效的,并且字符串文字的前四个字节"What"
被复制到x
.但是该数组x
不能用作C字符串.
由于尾随空字节,字符串"What"
的类型char[5]
.定义用char[4]
截断字符串并削减空字节.
由于在这种情况下缺少null终止符,因此myStrlen
调用未定义的行为.
只是用
char str[] = "What";
在实际代码中没有任何明确的数组长度.
而且,正如@Olaf在对你的问题的评论中所说:C没有方法而是功能!
方法在C++中可用,它们是虚函数的别名,在Java中(我没有任何线索).
Stroustroup先生在他的"C++编程语言第 4 版" 一书中介绍了C++中的方法,第20.3.2章:
虚拟成员函数有时称为方法.
有了这个功能
int main() { char x[4] = "What"; printf("%d\n", myStrlen(x)); return 0; }//Output: 21
中没有空终结符x
.所以它未定义为myStrlen()
循环,寻找null终止符,任何结果都是可能的.
赋值本身是有效的,并且字符串文字的前四个字节"What"
被复制到x
.但是该数组x
不能用作C字符串.