#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int main()
{
int i, num;
scanf("%d", &num);
while(getchar()!='\n'); // 清空键盘缓冲区。(scanf获取%d在键盘缓冲区中会残留 回车 '\n')
char *pnames[num]; // 指针数组:数组里面存放的是指针
char *str;// char str[MAX]; 改为手动申请
for(i = 0; i < num; i++)
{
printf("请输入第%d个队伍的名称:", i + 1);
str = malloc(sizeof(char)*MAX); // 手动申请内存
fgets(str, MAX, stdin); // str数组只有1个,在你这例中不现实,后面的内容会覆盖前面的。解决办法,手动申请内存,手动释放。
pnames[i] = str; // 把str的地址存入pnames[i]中。
if(i == num - 1)
{
printf("队伍名称已录入完毕,正在计算比赛安排...\n");
}
}
for(i = 0; i < num; i++)
{
printf("第%d个队伍的名称为:%s\n", i, pnames[i]);
}
// 手动释放内存
for(i = 0; i < num; i++)
{
free(pnames[i]); // 把指针数组中地址指向的空间释放
}
return 0;
}
|