Почему не работает копирование - 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);

Объяснение кода листинга программы

  1. В данном коде происходит попытка копирования строки из одного места в другое.
  2. Переменная pBuf является указателем на буфер, в котором будет происходить копирование.
  3. Значение 0 в выражении &pBuf[0] означает, что указатель pBuf указывает на первый элемент буфера.
  4. Выражение printf(&pBuf[0]); пытается вывести содержимое первого элемента буфера.
  5. Однако, данное выражение некорректно, так как printf ожидает строку в качестве аргумента, а не указатель на строку.
  6. Поэтому, второе выражение printf(pBuf); также некорректно, так как оно пытается вывести содержимое указателя, а не строку, на которую он указывает.
  7. В результате, код не работает корректно из-за неправильного использования функции printf и указателей на строки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы