这是我的代码。我正在使用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;
}