2015-02-15 4 views
-4

Какая у меня ошибка? Я просто запутался, чтобы использовать указатель как функцию.Возвратные указатели в функции

#include<iostream> 
using namespace std; 
char *strcpy(char *, const char *); // string copy 
int main() 
{ 
    char string1[20] = "Priteh Taral"; 
    char string2[20]; 
    char *result; 
    result = strcpy(string2, string1); 
    cout << *result << " "; 
} 

char *strcpy(char *ptr2, const char *ptr1) 
{ 
    while(*ptr1 != '\0') 
    { 
     *ptr2++ = *ptr1++; 
    } 
    *ptr2 = '\0'; 
    return &ptr2; 
} 

Как вернуть строку в качестве указателя?

+1

Есть ли причина, по которой вы используете 'char *' вместо 'std :: string'? – CoryKramer

+0

Ваша функция 'strcpy()' объявляется как возвращающая 'char *', но возвращает 'char **'. Зачем? –

+0

Не компилятор говорит вам, что не так, когда вы возвращаете указатель на указатель вместо возврата указателя на char? .. – dasblinkenlight

ответ

0

Просто верните ptr2.

ptr2 уже указатель. Когда вы скажете, чтобы он вернул &ptr2, вы просите **char, который является указателем на указатель символа. Это не то, что вы хотите.

1

На самом деле, зЬгср должен выглядеть следующим образом:

char *strcpy(char *ptr2, const char *ptr1) 
{ 
    char *base = ptr2; 
    while ((*ptr2++ = *ptr1++) != '\0') 
     ; 
    return base; 
} 

Функция (в стандарте) собирается вернуть оригинальное значение ptr2 (назначения). Кроме того, проще скопировать '\ 0' вместе со всем остальным в цикле.