Указатель char в C против указателя на массив символов, увеличение динамического выделения

Я новичок в C, и мне трудно понять причину, по которой приведенный ниже блок кода не работает.

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

int main()
{
    char *src = "http://localhost";

    /* THIS WORKS
       char scheme[10];
       char *dp = scheme;
     */

    //DOESN'T WORK
    char *dp = malloc(10);

    while (*src != ':') {
        *dp = *src;
        src++;
        dp++;
    }
    *dp = '\0';

    /* WORKS
       puts(scheme)
     */

    //DOESN'T WORK
    puts(dp);
}

Ожидаемый результат: http на стандартный вывод. В обоих случаях dp должен быть указателем на массив указателей char (char **) . Однако при использовании malloc ничего не печатается. . Я пропустил код через GDB, и мои src и dp стираются по одному символу за раз. Если я заключу цикл while в вызов функции работает. Я решил, что причина в том, что параметры оцениваются как копия. Однако затем я прочитал, что массивы являются исключением и передаются как указатели. Теперь я запутался. Я могу обойти это, но я пытаюсь чтобы понять, почему этот способ не работает.

6
задан Peter Mortensen 17 June 2011 в 08:31
поделиться