繁体   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