C从字符串数组打印字符串时出错
我是一个新手,我正在尝试为数组获取字符串,但由于某些原因,我无法打印它们,有人知道为什么?。多谢各位C从字符串数组打印字符串时出错,c,dynamic-memory-allocation,free,c-strings,C,Dynamic Memory Allocation,Free,C Strings,我是一个新手,我正在尝试为数组获取字符串,但由于某些原因,我无法打印它们,有人知道为什么?。多谢各位 int main(void) { int number_friends = 0, i = 0; printf("Enter number of friends: "); scanf("%d", &number_friends); getchar(); char** friends = (char**)mal
int main(void)
{
int number_friends = 0, i = 0;
printf("Enter number of friends: ");
scanf("%d", &number_friends);
getchar();
char** friends = (char**)malloc(number_friends * sizeof(char*));
get_friends_names(friends, number_friends);
for (i = 0; i < number_friends; i++)
{
printf("%s\n", friends[i]);
}
free(friends);
getchar();
return 0;
}
void get_friends_names(char** friends, int size)
{
char name[STR_LEN] = {0};
int i = 0, len = 0;
for (i = 0; i < size; i++)
{
fgets(name, STR_LEN, stdin);
name[strcspn(name, "\n")] = 0;
friends[i] = malloc(STR_LEN);
friends[i] = name;
}
}
int main(无效)
{
int number_friends=0,i=0;
printf(“输入好友数:”);
scanf(“%d”&朋友数);
getchar();
char**friends=(char**)malloc(number_friends*sizeof(char*);
获取朋友的姓名(朋友、朋友数量);
对于(i=0;i
此代码段
friends[i] = malloc(STR_LEN);
friends[i] = name;
没有意义,有两个缺点
第一个问题是内存泄漏。也就是说,内存是动态分配的,它的地址被分配给指针friends[i]
,然后指针立即被重新分配
第二个是您为指针friends[i]
分配了退出函数后将不活动的本地数组的地址
你至少需要像这样写
friends[i] = malloc(STR_LEN);
strcpy( friends[i], name );
或
同样,你需要释放所有分配的内存,比如
for (i = 0; i < number_friends; i++)
{
free( friends[i] );
}
free(friends);
for(i=0;i
请注意,函数中未使用变量
len
。friends[i]=name
您需要使用strcpy(朋友[i],姓名)另外,只分配所需的空间会更有效:friends[i]=malloc(strlen(name)+1)
您应该养成检查返回代码、scanf
、malloc
和fgets
所有可用于检查成功/失败的返回值的习惯。
for (i = 0; i < number_friends; i++)
{
free( friends[i] );
}
free(friends);