1

この関数は、Cで2つのパスを結合するために作成しました。

void *xmalloc(size_t size)
{
    void *p = malloc(size);
    if (p == NULL) {
        perror("malloc");
        exit(EXIT_FAILURE);
    }
    return p;
}

char *joinpath(char *head, char *tail)
{
    size_t headlen = strlen(head);
    size_t taillen = strlen(tail);
    char *tmp1, *tmp2;

    char *fullpath = xmalloc(sizeof(char) * (headlen + taillen + 2));
    tmp1 = head;
    tmp2 = fullpath;
    while (tmp1 != NULL)
        *tmp2++ = *tmp1++;
    *tmp2++ = '/';
    tmp1 = tail;
    while (tmp1 != NULL);
        *tmp2++ = *tmp1++;
    return fullpath;
}

しかし、最初のwhileループでsegfaultが発生しています*tmp2++ = *tmp1++;。何か案は?

4

1 に答える 1

4

while (tmp1 != NULL)間違っている。
する必要がありますwhile (*tmp1 != '\0')
ポインタ自体がNULLになることはありません。まさにそれが指しているもの。

于 2012-05-20T06:44:08.317 に答える