我是 C 新手,我正在尝试获取数组的字符串,但由于某些原因我无法打印它们,有人知道为什么吗?。谢谢
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;
}
}
答案 0 :(得分:0)
这段代码
friends[i] = malloc(STR_LEN);
friends[i] = name;
没有意义,有两个缺点。
第一个是内存泄漏。那就是动态分配内存并将其地址分配给指针friends[i]
,然后立即重新分配指针。
第二个是你为指针 friends[i]
分配了一个本地数组的地址,该数组在退出函数后将不存在。
你至少要像这样写
friends[i] = malloc(STR_LEN);
strcpy( friends[i], name );
或
friends[i] = malloc( strlen( name ) + 1 );
strcpy( friends[i], name );
此外,在 main 中,您需要释放所有分配的内存,例如
for (i = 0; i < number_friends; i++)
{
free( friends[i] );
}
free(friends);
注意变量len
不在函数内部使用。