随机符号在没有初始化的情况下打印

时间:2016-06-05 18:05:01

标签: c++ c++11 symbols

我制作了一个相当简短的基于文本的动画程序:

#include <iostream>

void animation(char words[], int sizeOfWords) {
    for(int x = 0; x < sizeOfWords; x++){
         for(double y = 0; y < 10000000; y++);
         std::cout << words[x];
         if(words[x] == '!') std::cout << std::endl;
    }
}

int main() { 
    char words[] = {'H','e','l','l','o',' ','W','o','r','l','d','!','T','h','i','s',' ','i','s',' ','m','y',' ','f','i','r','s','t',' ','C','+','+',' ','a','n','i','m','a','t','i','o','n','!','H','o','p','e',' ','y','o','u',' ','e','n','j','o','y','e','d','!'};

    int amountOfLetters = 0;
    for(unsigned x : words) amountOfLetters++;

    animation(words, amountOfLetters);
}

当我第一次制作程序时,我忘了将 int amountOfLetters; 初始化为0.这就是我得到所有这些随机符号的时候。无论是否初始化程序都可以。只是没有给它分配0,我最终得到了这些额外的东西。

没有变量初始化将给出以下结果:

  

Hello World!   这是我的第一个C ++动画!   希望你喜欢!   !   thtÉHPj TjÐou2ö¤。■╬╬ouÈ╬ouhtmzou   进程返回0(0x0)执行时间:11.466秒   按任意键继续。

初始化变量将产生以下结果:

  

Hello World!   这是我的第一个C ++动画!   希望你喜欢!   进程返回0(0x0)执行时间:4.444秒   按任意键继续。

如果需要,您可以尝试自己运行代码。我想知道为什么这些符号被打印出来。如果你能帮我,我会很感激。如果不是谢谢你停下来。

这篇文章不是为什么未初始化的char数组中填充了随机符号?。我谈到传递数组中的元素数量并将它们作为参数传递,然后循环遍历它们。另一篇文章只是简单地讨论初始化数组没有信息并打印它。同时,我再次谈论有信息,只是持有它们的数组的大小是问题所在。他们只是打印一个没有元素的数组,我的是通过一个带有元素的数组循环,但错误地为这个大小做错了。

2 个答案:

答案 0 :(得分:1)

  

当我第一次制作程序时,我忘了初始化int amountOfLetters;这是我得到所有这些随机符号的时候。无论是否初始化程序都可以。只是没有给它分配0,我最终得到了这些额外的东西。

那是因为没有初始化amountOfLetters amountOfLetters++;操作是未定义的行为。

amountOfLetters在循环开始时可能有一个任意值,因为它在之前的操作中留在了堆栈中。

另请注意,您可以大大简化和改进代码,只需省略循环并写入:

 animation(words, sizeof(words));

答案 1 :(得分:1)

您的animation函数正在按索引访问char数组,直到索引== sizeOfWords。如果amountOfLetters未初始化,您将开始递增随机值,因此将在animation中读取数组的末尾。当然,这具有随机值。