我有一个声明的数组,并填充了3个字符串(数学,物理,英语)。我使用fgets()获取新主题以添加到数组中,并且工作正常。但是,每当我复制相同的代码块以从用户那里获取另一个主题时,程序就会崩溃。
为什么会这样呢?如何从用户那里获取字符串并将其添加到数组?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *subjectName[1000];
int numOfSubj = 0;
int numOfUserAddedSubj = 0;
subjectName[numOfSubj] = "Math";
numOfSubj++;
subjectName[numOfSubj] = "Physics";
numOfSubj++;
subjectName[numOfSubj] = "English";
numOfSubj++;
//int k;
//for(k=0; k<1; k++)
//{
// add user
printf("Enter new subject name: ");
fgets(subjectName[numOfSubj], 50, stdin);
numOfUserAddedSubj++;
numOfSubj++;
//}
// add another user
/*printf("Enter new subject name: ");
fgets(subjectName[numOfSubj], 50, stdin);
numOfUserAddedSubj++;
numOfSubj++;*/
// display content of array
int i;
for(i=0; i < ((strlen(subjectName))+numOfUserAddedSubj); i++)
{
printf("%s\n", subjectName[i]);
}
return 0;
}
最佳答案
它在第一种情况下有效,因为您正在使用主题名称初始化char数组,以便编译器分配内存。
在USER情况下,您需要先分配内存,然后再从用户那里获取输入。
所以要避免出错
subjectName[numOfSubj] = malloc( 50 ); //memory allocation
fgets(subjectName[numOfSubj], 50, stdin);
并在每次使用完
free
内存后(由malloc分配)。free(subjectName[numOfSubj] );