[英]C error printing string from array of strings
我是新的 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;
}
}
此代碼段
friends[i] = malloc(STR_LEN);
friends[i] = name;
沒有意義,有兩個缺點。
第一個是存在 memory 泄漏。 那就是動態分配 memory 並將其地址分配給指針friends[i]
然后立即重新分配指針。
第二個是您為指針friends[i]
分配了一個本地數組的地址,該數組在退出function后將不再存在。
你至少需要寫
friends[i] = malloc(STR_LEN);
strcpy( friends[i], name );
或者
friends[i] = malloc( strlen( name ) + 1 );
strcpy( friends[i], name );
同樣主要是你需要釋放所有分配的 memory 像
for (i = 0; i < number_friends; i++)
{
free( friends[i] );
}
free(friends);
注意變量len
沒有在 function 中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.