int a1[26]={0};
char c[] = {'\0'};
int i,k,j=0;
gets(c);
int len = strlen(c);
for(i=0;i"%c",c[i]);
if(c[i]<='z'&&c[i]>='a'){
k = c[i]-'a';
printf("%c\n",c[i]);
a1[k] = a1[k] + 1;
}
}
不明白为何输入abcd,输出accd,但若将a1[k] = a1[k] + 1;注释,则正常输出abcd,请问这是什么原理
我这是正常的呀
该回答引用GPTᴼᴾᴱᴺᴬᴵ
问题出在定义字符数组 c 上。在 C 语言中,字符数组的定义方式如下:
char c[] = {'a', 'b', 'c', '\0'};
这里用花括号括起来的是一个字符数组的初始化列表,其中每个元素都是一个字符。
要解决这个问题,你可以使用以下方式定义字符数组 c,并且要确保数组大小足够存储输入的字符串:
char c[100];
另外,gets 函数在最新的 C11 标准中已被标记为废弃,因为它无法保证输入数据不会超出数组边界。你可以考虑使用 fgets 函数代替 gets,并且需要指定读取数据的最大长度。例如:
char c[100];
fgets(c, sizeof(c), stdin);
这样就能够正确读取并处理输入的字符串了。