我不能只打印一个循环吗? - C

时间:2013-11-24 02:45:05

标签: c loops

我想用 for 循环打印三个char变量,但我不知道为什么只打印last。

这是我的代码:

int main (){

    int i, j, k;
    char word[50], old[1], new[1];

    printf("Enter a word: ");
    gets(word);

    printf("Enter desired letter to substitute: ");
    gets(old);

    printf("Enter the new letter: ");
    gets (new);

    for (i = 0; i<strlen(word); i++){
        printf("%c", word[i]);
    }
    for (j = 0; j<strlen(old); j++){
        printf("%c", old[j]);
    }   
    for (k = 0; k<strlen(new); k++){
        printf("%c", new[k]);
    }
}

我不明白为什么这个简单的代码不起作用。

2 个答案:

答案 0 :(得分:4)

您的代码溢出了oldnew的缓冲区,因为它们没有足够的空间容纳1个字符的字符串。在C字符串中,需要以空值终止,因此char数组必须始终比它必须包含的最大字符数长一个元素。例如,您的word数组只能包含49个字符的字符串,因为第50个元素必须为空。

因此oldnew必须都是char[2]数组。

答案 1 :(得分:1)

您的循环不必要且不正确。您可以直接打印值而无需指定索引。在你的帖子中,你试图遍历每个索引并一次打印一个字符。这是你应该做的:

int main (){

int i, j, k;
char word[50], old[2], new[2];

printf("Enter a word: ");
gets(word);

printf("Enter desired letter to substitute: ");
gets(old);

printf("Enter the new letter: ");
gets (new);

printf("%s\n", word);
printf("%s\n", old);
printf("%s\n", new);

}