Я смотрел видео-лекцию о том, как сделать общий обмен с использованием memcpy()
и strdup()
.Общая подкачка «строки» в C
Общий код своп выглядит следующим образом:
void GenericSwap(void* ptr1, void* ptr2, int size){
char buf[size];
memcpy(buf,ptr1,size);
memcpy(ptr1,ptr2,size);
memcpy(ptr2,buf,size);
}
и мы называем это так:
char* h = strdup("fred");
char* w = strdup("wilma");
GenericSwap(&h,&w,sizeof(char*));
printf("h : %s\nw : %s\n\n",h,w);
Это поменялось «Фред» и «Вильма» в качестве целой строки. То есть, h указывает на «wilma» и w указывает на «fred» сейчас.
Однако, когда я изменить код для этого:
char h1[10] = "fred";
char w1[10] = "wilma";
GenericSwap(&h1,&w1,sizeof(char*));
printf("h1 : %s\nw1 : %s\n",h1,w1);
я получаю "Вильму" и "Фрид" для h1
и w1
. Я передаю адрес материала, содержащего адрес 1-го элемента массива, точно так же, как и правильный рабочий код вверху, но это не работает так хорошо, как верхний.
Это что-то около h1
и w1
является простым указателем, а не указателем на указатели?
ok! Тогда, скажем, в гипотетическом компиляторе, который ** позволяет ** разрешить это изменение адреса массива, в этом случае метод «& h» даст правильный ответ? как метод 'strdup()' дает? – Somjit
@Somjit Такой компилятор не будет компилировать язык программирования C, поэтому, конечно, я не знаю. – unwind
@unwind где OP пытается изменить адрес какого массива? –