C语言字符串输出的小问题?

来源:百度知道 编辑:UC知道 时间:2024/05/17 00:33:01
#include <stdio.h>
#include <conio.h>
void main(void)
{
int i, j;
char ch[10], *str[3];
for(i = 0 ; i < 3 ; i++)
str[i] = gets(ch);
printf("\n");
for(j = 0 ; j < 3 ; j++)
printf("%s\n", str[j]);

我输入aaa,bbb,ccc后,结果输出的全部都是三行CCC,这是为什么?怎样才能输出aaa,bbb,ccc,这个程序错在什么地方?
我主要是想知道我的程序到底为什么会导致那样的错误的原因分析。。。而不光是答案!

#include <stdio.h>
#include <conio.h>
void main(void)
{
int i, j;
char ch[10], *str[3];
for(i = 0 ; i < 3 ; i++)
str[i] = gets(ch); /*数组str的元素都指向ch数组,这里并没有另外分配空间存储字符串,只是一个指针指向*/
/*循环结束,ch中保存最后一次循环输入的字符串*/
printf("\n");
for(j = 0 ; j < 3 ; j++)
printf("%s\n", str[j]); /*三个指针是一样的,都指向ch*/
}

这样改:

#include <stdio.h>
#include <conio.h>
void main(void)
{
int i, j;
char ch[3][10], *str[3]; /*三个字符串需要3个字符串数组存储*/
for(i = 0 ; i < 3 ; i++)
str[i] = gets(ch[i]); /*数组str的元素分别指向ch数组的元素*/
printf("\n");
for(j = 0 ; j < 3 ; j++)
printf("%s\n", str[j]);
}

进一步简化:
#include <stdio.h>
#include <conio.h>
void main(void)
{
int i, j;
char ch[3][10]; /*三个字符串需要3个字符串数组存储*/
for(i = 0 ; i < 3 ; i++)
ge