在C(qsort)中排序字符串时出现分段错误

时间:2018-03-11 10:27:21

标签: c segmentation-fault qsort

这是我的代码。我正在使用Message Queue将名称列表发送到另一个进程。此过程接收正确的名称集,没有任何问题,但排序部分保持segfaulting。

任何帮助将不胜感激。提前谢谢。

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include<string.h>

#define KEY 1000
#define MAX 100
#define MSG_TYPE1 1
#define MSG_TYPE2 2

typedef struct names{
    long int type;
    char names[MAX][MAX];
}msg_name;

int cmp(const void* s1, const void* s2){return strcmp(*(char* const*)s1, *(char* const*)s2);}

int main(){
    int id=msgget(KEY, 0666);
    msg_name m1;
    m1.type = MSG_TYPE1;

    int n,i;

    int sz = msgrcv(id, (void*)&m1, sizeof(m1.names), MSG_TYPE1, 0);
    n=sz/MAX;
    printf("%d names received\n", n);
    for(i=0;i<n;i++){printf("%s\n", m1.names[i]);}

    qsort(m1.names, n, sizeof(m1.names), cmp);

    printf("The sorted list of names:\n");
    for(i=0;i<n;i++){printf("%s\n", m1.names[i]);}
    return 0;
}

0 个答案:

没有答案