字符串复制 哪错了

来源:百度知道 编辑:UC知道 时间:2024/06/17 13:49:32
题目描述

输入若干行字符,全部输入结束后,请按照原输入顺序再次输出。

输入

首先输入一个整数n代表有n行字符,1 <= n <= 100。
随后n行,为输入的内容,每行不超过80个字符。

输出

全部输入结束后,将输入的内容再次输出。

样例输入

3
please repeat after me:
one two three
OK?

样例输出

please repeat after me:
one two three
OK?
#include<stdio.h>
int main()
{
int n,j;
scanf("%d",&n);
char jc24[n][80];
getchar();
for(j=0;j<n;j++)
gets(jc24[j]);
for(j=0;j<n;j++)
puts(jc24[j]);
system("pause");
return 0;
}

程序在Dev-c++下运行可以通过。但是估计你是用tc或者win-tc,报错。
因为在tc中要先定义变量,再使用。同时定义数组时数组的大小一定要是确定的,因为这时编译器要根据数组大小为它们分配一段连续的内存空间供程序运行使用,不知道具体大小它无法分配空间。也就是说tc不支持动态定义数组大小。
scanf("%d",&n);
char jc24[n][80];应先定义变量,故改为
char jc24[n][80];
scanf("%d",&n); 但是这时n未知,成了动态定义,也不对。
改动办法1:定义大数组 char jc24[100][80];设输入不超过100行,其它不变。即
int n,j;
char jc24[100][81]; /*81表示最多一次可以输入80字符,最后一个'\0'结尾*/
scanf("%d",&n);
改动办法2:动态申请内存并配合使用指针数组
#include<stdio.h>
int main()
{
int n,j;
char *jc24[100];
scanf("%d",&n);
getchar();
for(j=0;j<n;j++)
{ if((jc24[j]=(char *)malloc(81))==NULL)
{
printf("Allocation Error.\n");
getch();
exit(1);
}
/* 在分配的内存中存放字符串 */
gets(jc24[j]);
}
for(j=0;j<n;j++)
puts(jc24[j]);
/* 释放申请的内存 */
for(j=0; j<n; j++)
free(jc24[j]);
system("pa