Я новичок в 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
в вызов функции работает. Я решил, что причина в том, что параметры оцениваются как копия. Однако затем я прочитал, что массивы являются исключением и передаются как указатели. Теперь я запутался. Я могу обойти это, но я пытаюсь чтобы понять, почему этот способ не работает.