我想用 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]);
}
}
我不明白为什么这个简单的代码不起作用。
答案 0 :(得分:4)
您的代码溢出了old
和new
的缓冲区,因为它们没有足够的空间容纳1个字符的字符串。在C字符串中,需要以空值终止,因此char
数组必须始终比它必须包含的最大字符数长一个元素。例如,您的word
数组只能包含49个字符的字符串,因为第50个元素必须为空。
因此old
和new
必须都是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);
}