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上收到错误。我究竟做错了什么?
答案 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] ) ;
}
}