2015-02-03 1 views
1

Мне нужно сделать функцию, которая получает два указателя на символы и копирует содержимое одного в другое, а затем возвращает начало указателя. Я уже пару часов общался с этим и прочитал 100 примеров, которые все разные. Вот то, что я прямо сейчас:Функция strcopy с использованием указателей не работает

char * mystrcpy(char * dest, char * src) { 
     while(1) { 
      if(*src == '\0') { 
      *dest = '\0'; 
      return dest; 
      } 
      else { 
      *dest = *src; 
      *src++; 
      *dest++; 
      } 
     } 
+1

Вы увеличиваете символы вместо указателей, указывающих на них, и не отслеживаете начало строки назначения. ** Сначала попробуйте несколько простых упражнений. ** – Beta

+0

http://stackoverflow.com/questions/13460934/strcpy-using-pointers/26317153#26317153 –

ответ

2
dest++; 

dest является указателем и перемещении его для того, чтобы скопировать значения из src Итак, когда вы вернетесь dest это уже указывает до конца строки.

Так что не переместите этот указатель, просто скопируйте значения в него с помощью индексации.

int i=0; 
while(*src) 
{ 
    dest[i] = *src; 
    i++; 
    src++; 
} 

dest[i] = '\0'; 

return dest; 

Таким образом, даже если вы исправить *dest++ к dest++, что вы возвращаетесь не даст ожидаемых результатов.

+0

. Это имеет смысл. Благодаря тонну! – Cory

+0

@Cory no probs .. – Gopi

4

Что вы хотите, чтобы увеличить указатели, в то время как вы на самом деле увеличиваем характер, что они указывают.

Изменить

*src++; 
*dest++; 

к:

src++; 
dest++; 
+0

После этого то, что я возвращаю, по-прежнему не дает мне правильного результата. Например, если я должен был дать src как «Hello world», он возвращается »« – Cory

+1

@Cory. Вы перемещаете указатель, который неверен для возврата значения – Gopi

0

эти две линии:

*src++; 
    *dest++; 

должно быть:

src++; 
    dest++; 

Извещение нет разыменовываются указателей, как код должен увеличивать указатели, а не то, что указатели, указывающие на.

И было бы неплохо сохранить начальное значение dest, чтобы его можно было вернуть. И чтобы избежать потери какой-либо строки уже в буфере dest, я подозреваю, что значение (после сохранения) dest должно быть увеличено на dest + = strlen (dest);

так что происходит концентрирование двух строк, а не наложение начальной строки в dest.

Перед тем, как эта функция вызывается, должна быть проверка того, что буфер dest достаточно долго, чтобы удерживать strlen() обеих строк +1.

+1 - разрешить байт завершения.