为什么fgets函数和gets函数会使循环终止?
#include <stdio.h>#include <stdlib.h>
int main()
{
int j;
char *pi;
for(j = 0; j < 3; j++)
{
printf("请输入第%d个字符串:", j + 1);
fgets(pi, 1024, stdin);
//gets(pi);
printf("*pi[%d] = %s", j, pi);
printf("\n");
}
return 0;
}
问题1:执行第一次循环,输入第一个字符串后,循环在fgets函数或gets函数后直接终止了,这是什么原因?
问题2:想要输入一个字符串数组应该怎么做? 本帖最后由 zzxhh628 于 2022-3-23 08:07 编辑
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int main()
{
int i;
const int num = 4;
char *pnames;
for(i = 0; i < num; i++)
{
pnames= malloc(MAX);
fgets(pnames, MAX, stdin);
printf("i = %d, num = %d\n", i, num);
if(i == num-1)
{
printf("队伍名称已录入完毕,正在计算比赛安排...\n");
}
}
return 0;
}
情况不确定,但是num如果不用修改的话尽量用const定义,以防止发生改变。 #include <stdio.h>
#include <stdlib.h>
int main()
{
int j;
char *pi;
for(j = 0; j < 3; j++)
{
pi=malloc(1024);
printf("请输入第%d个字符串:", j + 1);
fgets(pi, 1024, stdin);
//gets(pi);
printf("*pi[%d] = %s", j, pi);
printf("\n");
}
return 0;
}
改成这样就没问题了,使用字符指针数组应该给每个都分配空间,用malloc分配内存空间。 本帖最后由 silver-crow 于 2022-3-22 14:11 编辑
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int main()
{
int i, num = 4;
char *pnames;
for(i = 0; i < num; i++)
{
pnames = malloc(MAX);
fgets(pnames, MAX, stdin);
printf("i = %d, num = %d\n", i, num);
if(i == num - 1)
{
printf("队伍名称已录入完毕,正在计算比赛安排...\n");
}
}
return 0;
}
为什么第四次输出的时候num不等于4而是一串随机数?
使用完毕后要释放内存,后面加一个free(pnames)的循环,将所有元素分配的内存都释放掉。 {:10_317:}
页:
[1]