我试图通过从管道读取字符然后将它们放入结果字符串中来实现合并。我不断收到段错误,并且无法调试问题的根源。当我删除对此函数的调用时,问题就消失了,所以我感觉这里有些东西不正确:
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;
}
有人能看出我做错了什么吗?
最佳答案
如果您正在将 N 个字符读入长度为 N 的缓冲区,那么您期望 strlen
函数如何正常工作...它至少需要一个 N+1
因为必须有空间容纳终止 \0
字符。当那不存在时,谁知道接下来会发生什么......
关于C char 数组和指针 - 归并排序的合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845355/