C char 数组和指针 - 归并排序的合并

标签 c pointers merge segmentation-fault pipe

我试图通过从管道读取字符然后将它们放入结果字符串中来实现合并。我不断收到段错误,并且无法调试问题的根源。当我删除对此函数的调用时,问题就消失了,所以我感觉这里有些东西不正确:

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/

相关文章:

c - 当链表增长超过 100 个元素时,链表头的值会默默地改变

python - 如何合并多维数据框和不同长度的系列?

visual-studio-2013 - TFS 2013 - 合并 Word 文档

c++ - 将二进制数据文件包含到编译的二进制文件中,而不转换为十六进制数组

c - 为什么这个shift插入1s呢? C

c - 调试远程 C 应用程序

c++ - 通过c中的指针传递二维数组时出错

c - 是什么名字?

mysql - 如何使用mysql数据库合并表?

c++ - DeviceIoControl 之后出现访问冲突错误