下面的程序在第一个循环中正确打印了数组“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 给出这些结果。
当您分配
count[i]=plus;
和 i==a
时,该程序会调用未定义的行为。
您需要从定义中删除
-1
。#
一些补充说明:
size_t
而不是 int
a
、i
、j
、k
....strlen(s);
不使用返回值是没有意义的 size_t plus=0;
char text[20]="hello";
size_t textLength=strlen(text);
size_t count[textLength];