weixin_43812352
weixin_43812352
采纳率0%
2019-01-15 17:01

请问以下这段C++代码有什么问题?

编译器是 Visual Studio 2010
运行时弹出警示框,提示words变量在未被初始化的情况下被使用。

int main ()
{
    char article[5000];
    char words[500][20];
    char sentences[100][100];
    int countSentences=0;
    int countWords=0;
    char *count;
    char *temp;
    cout<<"请输入需要解析的英语文章:";
    cin.getline(article,5000);
    count=article;
    temp=article;
    for(int i=0;*temp!=' ';temp++,i++)
        words[0][i]=*temp;
    for(;*count;count++)
    {
        if (*count==' ') countWords++;
        else if (*count=='?'||*count=='.'||*count=='!') countSentences++;
    }
    countWords++;
    cout<<"共计 "<<countWords<<" 个英语单词"<<endl;
    cout<<"共计 "<<countSentences<<" 个句子"<<endl;
    cout<<*words[0]<<endl;
}

C++小白,指针的概念这一块始终有点弄不清楚。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • qq_21505277 qq_21505277 2年前
    for(int i=0;*temp!=' ';temp++,i++)
        words[0][i]=*temp;  -->这里有问题吧
    

    words[0]的数组宽度是20,不能一直i++,你如果想用可以把把转成指针
    cahr* pctempbuff = &words[0][0];

    for(int i=0;*temp != ' ' && i < 5000;temp++,i++,pctempbuff++)

    *pctempbuff =*temp;
    

    顺便再申请一下数组内存初始化什么的

    #define WordsdBuffSize sizeof(char)*5000

    char * article= (char*)malloc(WordsdBuffSize);

    memset(article, 0, WordsdBuffSize);

    free(article);
    article = NULL;

    点赞 评论 复制链接分享
  • ws18643634871 ws18643634871 2年前

    可能是逻辑问题,你可以画一个框图

    点赞 评论 复制链接分享
  • qq_38381547 qq_38381547 2年前

    在你声明words的时候,c++会分配一段地址给这个变量
    里面地址的初始值不是固定的值
    那个值有可能是上一次别的程序运行完之后留下来的。

    这有点像去餐馆吃东西拿到了一个桌子(地址),由于那家餐馆(c++)是不会帮你收拾桌子上的东西的,在那个桌子(地址)。别人在桌子上吃完了东西有可能没收拾桌子上的东西(没有地址上的数据清掉),那你不先清理桌子(初始化数组),读取数组数据的就有可能不小心读到一些奇奇怪怪的东西。

    点赞 评论 复制链接分享
  • lanhao5635865 浩天的博客 2年前

    这里的意思是这样, 把你输入的英文字母, 循环赋值到words数组中
    words是一个二维数组, 第二维是一个一个的字符, 比如输入 abcdefg 那么二维上面存放的是 a 字符 b 字符 c字符 等等
    但是如果访问words的第一维 那么就是一个字符串
    比如 words[0][0] = 'a' words[0][1]= 'b' words[0][2] = 'c'
    那么输出 words[0]表示 abc这个字符串的地址
    *word[0]就会输出 字符串 'abc'
    错误的话你还是吧完整的错误信息发出来我看看

    点赞 评论 复制链接分享