В чем разница между двумя способами манипулирования строками в C? - PullRequest
2 голосов
/ 06 ноября 2019

Я хочу скопировать строку "str" ​​в p. Сначала я использовал закомментированный код, но вывод был пустым. Итак, я попробовал код, который находится ниже области комментариев, и это сработало. В чем разница между двумя методами для работы со строками в C? Заранее спасибо.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    int main(void)
    {
        char *str = "laekfja";
        char *p = (char*)malloc(51 * sizeof(char));

        //First try.
        /*  while(*str)             
                {                   
                    *p++ = *str++;  
                }                   
            *p = '\0';
            printf("%s\n", p);    
        */

        //Second try.
        int i = 0;
        while(i < strlen(str))
            {
              p[i] = str[i];
              i++;
            }
        p[i] = '\0';
        printf("%s\n", p);
        return 0;  
    }

1 Ответ

1 голос
/ 06 ноября 2019

Оба метода работают для копирования строки. Ошибка в первом методе заключается в печати скопированной строки после завершения цикла:

printf("%s\n", p);

В этот момент p указывает на последний символ, вставленный в копию, нулевой символ,не начало строки. Так что printf() правильно ничего не печатает.

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