以下代码有什么问题

时间:2013-09-03 15:33:14

标签: c++

我在C ++中写下了一段代码,使单词从字符串输入中出现在数组中。 但它不会因溢出或其他原因而起作用。但编译器没有显示任何错误。

 #include <iostream>
 #include <stdio.h>
 #include <string.h>
 using namespace std;
 int main()
 {
    char a[100];
    gets(a);
    char b[100][100];
    int I=0;
    for(int j=0;j<strlen(a);j++) //runs the loop for words
    {
        int k=0;
        do
        {
            b[I][k]=a[j];
            k++;            
        }
        while(a[j]!=' ');
        I++;
    }
    cout<<b[0][0];
    return 0;
}

2 个答案:

答案 0 :(得分:7)

如果您要使用C字符串,则需要在每个字符串的末尾添加一个空终止符

do {
    b[I][k]=a[j];
    k++;
} while(j+k<strlen(a) && a[j+k]!=' ');
b[I][k] = '\0';

正如ppeterka所说,你还需要改变循环退出条件以避免无限循环。

另请注意,在此处和代码中重复调用strlen是浪费的。您应该考虑在for循环之前计算一次。

答案 1 :(得分:0)

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
    char a[100];
    gets(a);
    char b[100][100];
    int I=0;
    int j =0;
    while(j< 100) //runs the loop for words
    {
        int k=0;
        do
        {
            b[I][k]=a[j+k];
            k++;

        } while(a[j+k]!=' ');
        b[I][k+1] = '/0';
        I++;
        j= j+k;
    }
    cout<<b[0][0];
    return 0;
}