当前位置:  开发笔记 > 编程语言 > 正文

为什么功能根据容量返回不同的值

如何解决《为什么功能根据容量返回不同的值》经验,为你挑选了2个好方法。

我正在研究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字符串.



1> cadaniluk..:

由于尾随空字节,字符串"What"的类型char[5].定义用char[4]截断字符串并削减空字节.

由于在这种情况下缺少null终止符,因此myStrlen调用未定义的行为.

只是用

char str[] = "What";

在实际代码中没有任何明确的数组长度.


而且,正如@Olaf在对你的问题的评论中所说:C没有方法而是功能!
方法在C++中可用,它们是虚函数的别名,在Java中(我没有任何线索).

Stroustroup先生在他的"C++编程语言 4 版" 一书中介绍了C++中的方法,第20.3.2章:

虚拟成员函数有时称为方法.



2> P.P...:

有了这个功能

int main()
{
    char x[4] = "What";
    printf("%d\n", myStrlen(x));
    return 0;

}//Output: 21

中没有空终结符x.所以它未定义myStrlen()循环,寻找null终止符,任何结果都是可能的.

赋值本身是有效的,并且字符串文字的前四个字节"What"被复制到x.但是该数组x不能用作C字符串.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有