Почему не работает копирование - C (СИ)
Формулировка задачи:
Привет уважаемые!
Недавно начал изучать язык СИ - очень нравится, но есть одна вещь которую я понять не могу, если можно объясните.
Есть код:
А если на писать так:
Почему так?
Объясните пожалуйста или посоветуйте хорошую статью по этой теме, желательно (
char *str = "Test Of String"; char *pBuf = (char *)malloc(strlen(str) + 1); while(*pBuf++ = *str++); printf(&pBuf[0]); // Фига с маслом
char *str = "Test Of String"; char *pBuf = (char *)malloc(strlen(str) + 1); char *pBUF = &pBuf[0]; while(*pBUF++ = *str++); printf(&pBuf[0]); // "Test Of String" - УРА!
очень желательно
) на русском языке. В google нечего подходящего не нашел, наверное потому что я новичок и недостаточно правильно задаю вопросы Googl-у, в связи с этимсоРРи
если вопрос чересчур глупый. PS: КомпиляторMinGW
, да и если можно посоветуйте пару хороших статей проMakefile
ато уже пальцы устали в консоле имена файлов набивать.Решение задачи: «Почему не работает копирование»
textual
Листинг программы
printf(&pBuf[0]); printf(pBuf);
Объяснение кода листинга программы
- В данном коде происходит попытка копирования строки из одного места в другое.
- Переменная
pBuf
является указателем на буфер, в котором будет происходить копирование. - Значение
0
в выражении&pBuf[0]
означает, что указательpBuf
указывает на первый элемент буфера. - Выражение
printf(&pBuf[0]);
пытается вывести содержимое первого элемента буфера. - Однако, данное выражение некорректно, так как
printf
ожидает строку в качестве аргумента, а не указатель на строку. - Поэтому, второе выражение
printf(pBuf);
также некорректно, так как оно пытается вывести содержимое указателя, а не строку, на которую он указывает. - В результате, код не работает корректно из-за неправильного использования функции
printf
и указателей на строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д