我试图通过从管道中读取字符然后将它们放入结果字符串来实现合并。我不断收到分段错误,并且无法调试问题的根源。当我删除对该函数的调用时,问题就消失了,所以我觉得这里有些不正确:
MAX_LENGTH 设置为 1024,我只对大约 30 个字符进行排序,所以我相信我应该有多余的空间。
int merge(char *result, int *leftpipefd, int *rightpipefd) {
char left[MAX_LENGTH/2];
char right[MAX_LENGTH/2];
int leftpos = 0;
int rightpos = 0;
int resultpos = 0;
read(leftpipefd[READ_END], left, MAX_LENGTH/2);
read(rightpipefd[READ_END], right, MAX_LENGTH/2);
int leftlen = strlen(left);
int rightlen = strlen(right);
while (leftpos < leftlen || rightpos < rightlen) {
if (leftpos < leftlen && rightpos < rightlen) {
if (left[leftpos] <= right[rightpos]) {
result[resultpos] = left[leftpos];
resultpos++;
leftpos++;
} else {
result[resultpos] = right[rightpos];
resultpos++;
rightpos++;
}
} else if (leftpos < leftlen) {
result[resultpos] = right[rightpos];
resultpos++;
rightpos++;
} else if (rightpos < rightlen) {
result[resultpos] = left[leftpos];
resultpos++;
leftpos++;
}
}
return EXIT_SUCCESS;
}
谁能看到我做错了什么?