【发布时间】:2018-05-23 21:16:15
【问题描述】:
也许某些属性在我没有注意到的情况下传递,但是当 'i' 为 1 时,它就会冻结。当我输入任何字符串时,'j' 变量在不同的执行中变为 700 或 2000。如果输入“cheese”,则代码目标是输出重复的字母,输出应为“eee”。我做错了什么?
#include <stdio.h>
char * repeticoes(char *s) {
int index = 0;
for (int i = 0;( s[i] != '\0'); i++) //problem starts when i is > 0
{
for (int j = 0; ( s[j] != '\0'); j++)
{
if (s[i] == s[j])
{
printf("%c == %c\ni %d j %d\n", s[i], s[j],i,j);
s[index++] = s[i];
}
else
{
printf("not happening %c != %c\ni %d j %d\n", s[i],s[j],i,j);
}
}
}
s[++index] = '\0';
return s;
}
main() {
char input[21];
printf("str 1\n");
fgets(input, 20, stdin);
repeticoes(input);
printf("duplicated letters %s\n", input);
}
【问题讨论】:
-
你有什么意见?
-
也许你的 s[index++] = s[i],覆盖了终止的零,因此循环永远不会到达终点,尽管我可能会误会。
-
@EugeneSh。奶酪,但任何输入都会产生意想不到的输出
-
@kingW3 不明白为什么,但我应该改变什么?
-
s[index++] = s[i];是错的。您正在修改输入字符串。这可能会导致字符串末尾的 0 被覆盖,并导致缓冲区溢出。而是使用其他缓冲区来复制字符。