帮看下我的小程序怎么出的错

来源:百度知道 编辑:UC知道 时间:2024/06/05 06:18:17
输出的字符之间老是出现奇怪的东西;
#include <iostream>
#include <string>
using namespace std;

int main(){
char ree[2000];
cin.getline(ree,2000);
char letter[80][20];
int len = strlen(ree);
int count = 0;
for(int s = 0;s<len;s++){
if(ree[s] == ' ')count++;}
count++;
int h = 0;
for(int g = 0;g<count-1;g++){
for(int ss=0;h<2000;h++,ss++){
if(ree[h]!=' ')
letter[g][ss] = ree[h];
else{
h++;break;
}
}
}
for(int wc = 0;wc<len-h;wc++)
letter[count-1][wc]=ree[h+wc];
for(int kof = 0;kof<count;kof++){
for(int av = 0;av<strlen(letter[kof]);av++)
cout << letter[kof][av];
cout <<" ";
}
sy

刚才已经回答你了啊:
这是由于你声明数组char letter[80][20];时,并没有对它进行初始化处理,
如果数组声明是不进行初始化的话,他的各成员的值还是保持地址空间被分配前的原先的值,也就是一些随机的值。
所以对于letter数组,那些在程序中没有被直接赋值的成员中一直存放一些随机的值,最后被当成有效值输出了,就出现了你说的那些奇怪的东西。

这么改就OK了:
#include <iostream>
#include <string>
using namespace std;

int main(){
char ree[2000]={NULL}; //将数组用NULL值进行初始化
cin.getline(ree,2000);
char letter[80][20]={NULL}; //将数组用NULL值进行初始化
int len = strlen(ree);
int count = 0;
for(int s = 0;s<len;s++){
if(ree[s] == ' ')count++;}
count++;
int h = 0;
for(int g = 0;g<count-1;g++){
for(int ss=0;h<2000;h++,ss++){
if(ree[h]!=' ')
letter[g][ss] = ree[h];
else{
h++;break;
}
}
}
for(int wd = 0;wd<len-h;wd++)
letter[count-1][wd]=ree[h+wd];
for(int kof = 0;kof<count;kof++){
for(int v = 0;v<strlen(letter[kof]);v++)
cout << lett