为什么这个程序会跳过循环?

时间:2016-06-16 08:10:14

标签: c++ string

我无法弄清楚这个程序的问题。

#include <iostream>

using namespace std;

int main(){

    int t;
    char s[5];

    cin>>t;
    cin>>s;

    while(t--){

       char f[100];

       cin>>f;

       cout<<f<<endl;
    }

    return 0;
}

输出:

5 abcde 
Process returned 0 (0x0)   execution time : 4.100 s
Press any key to continue.

我认为它应该要求字符串f五次并在终止前打印字符串f五次。

任何人都可以帮我摆脱这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:3)

考虑到终止空字符,5个字符的字符串太长而无法容纳char s[5];。在这种情况下,t似乎发生就在内存中s之后,并且您的计算机正在使用小端,因此终止空字符,其值为0,被覆盖到t的最小字节,t 的值为零。

为避免这种情况,您应该使用std::string代替char的数组,如下所示:

#include <iostream>
#include <string>

using namespace std;

int main(){

    int t;
    string s;

    cin>>t;
    cin>>s;

    while(t--){

       string f;

       cin>>f;

       cout<<f<<endl;
    }

    return 0;
}

如果需要使用char数组,请使输入字符串足够短或增加缓冲区大小以使其能够存储所有可能的输入而不会导致缓冲区溢出。