将字符串从结构传递到字符串数组 - C.

时间:2014-05-12 14:29:22

标签: c arrays string

typedef struct mensagem
{
    int sender ;
    int receiver ;
    char *text ;
} *Item ;

typedef struct node
{
    Item item ;
    struct node *next ;
} *link ;

typedef struct queue
{
    link head, tail ;
    int size ;
} *Queue ;

     void listsorted(Queue list)
    {
        Queue temp = list ;
        int s=temp->size ;
        char *sorted ;
        int i=0;

        sorted = (char*) malloc(sizeof(char));

        while ( i < s )
        {
            strcpy( sorted[i] , list->head->item->text ) ;
            list->head = list->head->next ;
            i++ ;
        }

        i=0;

        for ( i=0 ; i<s ; i++ )
        {
            printf("%s\n", sorted[i] ) ;
        }
    }

我想按字母排序队列,所以我想把字符串复制到一个数组并qsort那个数组。但我甚至没有设法用字符串制作数组。我在strcpy上收到错误。我究竟做错了什么?

2 个答案:

答案 0 :(得分:1)

sorted[i]的类型为char,而不是char *类型。那是因为你只是分配一维数组(即字符串)而不是二维数组(即字符串数组)。此外,您malloc 1个字节,然后尝试将list->head->item->text的内容复制到其中。即使你要编译这段代码,这也是个坏消息。

确保始终分配正确的内存量,并确保始终使用strncpy代替strcpy

答案 1 :(得分:0)

你不是malloc()'的两个维度。看看下面的代码(未经测试):

 void listsorted(Queue list)
{
    Queue temp = list ;
    int s=temp->size ;
    char **sorted ; /* Changed here */
    int i=0;

    sorted = malloc((s + 1) * sizeof(char *)); /* Changed here */

    while ( i < s )
    {
        sorted[i] = malloc(strlen(list->head->item->text) + 1); /* Changed here */
        strcpy( sorted[i] , list->head->item->text ) ;
        list->head = list->head->next ;
        i++ ;
    }
    sorted[i] = NULL; /* Changed here. NULL terminate array */

    i=0;

    for ( i=0 ; i<s ; i++ )
    {
        printf("%s\n", sorted[i] ) ;
    }
}