Как мне учесть, что NULL передается в качестве параметров в мою программу? - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь объединить две строки.Я получаю ошибку сегментации, когда я передаю NULL в S1 и / или S2.Я подумал, что это как-то связано со строкой 19 через отладку, но я не могу понять это из-за моей неопытности.

char *string_nconcat(char *s1, char *s2, unsigned int n)
{
        char *p1 = s1, *p2 = s2;
        unsigned int L1 = 0, L2 = 0, c = 0;
        char *cstr, *dest;
        if (s1 == NULL)
                s1 = "";
        if (s2 == NULL)
                s2 = "";
        while (*p1 != 0)
                p1++, L1++;
        while (*p2 != 0)
                p2++; L2++;

        if (n >= L2)
                cstr = malloc((L1 + L2 + 1) * sizeof(char));
        else
                cstr = malloc((L1 + n + 1) * sizeof(char));
        p1 = s1, p2 = s2, dest = cstr;
        if (cstr == NULL)
                return (NULL);

        while (*p1 != '\0')
        {
                *dest = *p1;
                dest++;
                p1++;
        }
        while (*p2 != '\0' && c < n)
        {
                *dest = *p2;
                dest++;
                p2++;
                c++;
        }
        *dest = '\0';

        return (cstr);
}

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Когда вы обнаружите, что вы были переданы в NULL, вы устанавливаете s1 или s2 на пустую строку, но это не меняет то, на что p1 / p2 указывает, поэтому, когда попробуйте и используйте их позже, они все еще указывают на NULL.

0 голосов
/ 08 марта 2019

Добавить *p1 = s1, *p2 = s2; через секунду, пока

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...