簡體   English   中英

C 從字符串數組打印字符串時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM