奇怪的问题是局部变量在c ++中没有重置为0

时间:2017-05-01 21:45:53

标签: c++

所以我正在做一个计算字符数组中字符数量的超级简单程序,而且我得到的返回值实际上没有任何意义......

这是功能:

    int countLetters(const char s[])
    {
    int count = 0;
    while(s[count] != '\0')
        {
        count = count + 1;
        }
    return count;
    }

我的主要功能是:

    const char ch[5] = {'h','e','l','l','o'};
    const char cha[5] = {'a','b','c','d','e'};
    const char chacha[1] = {'a'};
    cout << countLetters(ch);
    cout << countLetters(cha);
    cout << countLetters(chacha);

预期的输出应该是5 5 1但是我得到了8 13 14而且我真的不知道为什么... count是一个局部变量因此它不应该保存该值,它甚至会被重置为每个函数调用开始时为0,它仍然可以正常工作。是否存在一些语法问题,或者我的编译器有什么问题?我真的无法弄清楚问题是什么......

1 个答案:

答案 0 :(得分:7)

此:

  const char ch[5] = {'h','e','l','l','o'};

不是以空值终止的。这样:

  const char ch[6] = {'h','e','l','l','o', 0 };

会。你所看到的是未定义的行为。