为什么它不像第一个循环那样在第二个循环中打印数组?

问题描述 投票:0回答:1

下面的程序在第一个循环中正确打印了数组“hello”。但在第二个循环中,它打印的所有内容都是“o”。当然,整数 k 是毫无意义的,但我使用它是因为我认为原因可能是我在第一个 for 循环中使用了“i”

我本来希望得到“你好”x2,但我却接受了“你好”和“o”。我仍然不明白为什么会发生这种情况,老实说,我花了一个多小时试图弄清楚这一点,但我被困住了

#include<stdio.h>
#include<string.h>

int main(){
    int i=0;
    int j=0;
    int plus=0;
    char s[20]="hello";
    strlen(s);
    int a=strlen(s);
    int count[strlen(s)-1];
    int k=0;

    for(i=0;i<a;i++){
        printf("%c",s[i]);
        if(s[i]==' ')
            continue;
        else{
            for(j=0;j< a;j++){
                if(s[i]==s[j]){
                    plus++;
                    count[i]=plus;
                }
            }
        }
        plus=0;
    }
    printf("\n");

// find max/es counts
    for(k=0;k<a;k++){
        printf("%c",s[k]);
    }

    return 0;
}

程序的目的并不重要,我只是想帮助理解为什么 printf 给出这些结果。

arrays c string for-loop printf
1个回答
0
投票

当您分配

count[i]=plus;
i==a
时,该程序会调用未定义的行为。

您需要从定义中删除

-1
。#

一些补充说明:

  1. 使用正确的尺寸类型 - 即
    size_t
    而不是
    int
  2. 使用有意义的变量名称,而不是
    a
    i
    j
    k
    ....
  3. 您的行
    strlen(s);
    不使用返回值是没有意义的
    size_t plus=0;
    char text[20]="hello";
    size_t textLength=strlen(text);
    size_t count[textLength];
© www.soinside.com 2019 - 2024. All rights reserved.