Как мне вернуть и распечатать начальный адрес первой строки (string1)? - PullRequest
1 голос
/ 18 апреля 2020

Сначала я копирую вторую строку в первую. Тогда я бы вернул указатель string1 из функции. Затем я использую % p и (void *) , чтобы распечатать начальный адрес первой строки. Это правильный подход?

    printf("address: %p  \n", (void*)functionstrcpy(stringnumber1,stringnumber 2));
    return 0;
}

char *functionstrcpy(char *stringnumber1,char *stringnumber2)
{
    //calculation
    return stringnumber1;
}

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Как вернуть и распечатать адрес .... строки ...
Я использую "%p" и (void*), чтобы распечатать начальный адрес первой строки. Это правильный подход?

Да. Возвращение верное и "%p" ожидает совпадения с void *. Тем не менее, поскольку char * и void * имеют одинаковую кодировку и размер, любой из них будет работать.

printf("address: %p  \n", (void*)functionstrcpy(str1,str2));
// or 
printf("address: %p  \n",        functionstrcpy(str1,str2));

Таким образом, выбор будет наилучшим в соответствии с руководством по стилю вашей группы.

0 голосов
/ 18 апреля 2020

Объявление функции должно выглядеть следующим образом:

char * functionstrcpy( char *str1, const char *str2 );

Поскольку вы уже используете стандартную C функцию strlen, тогда почему бы не использовать другую строковую функцию strcpy? В этом случае функция может быть просто оболочкой для функции strcpy без каких-либо дополнительных функций.

char * functionstrcpy( char *str1, const char *str2 )
{
    return strcpy( str1, str2 );
}

Если вы хотите написать функцию самостоятельно, не используя стандартную C функцию strcpy, тогда его определение может выглядеть так:

char * functionstrcpy( char *str1, const char *str2 )
{
    for ( char *p = str1; ( *p++ = *str2++ ); );

    return str1;
}

Вы можете использовать возвращенный указатель при вызове printf как

printf("address: %p  \n", (void*)functionstrcpy(str1,str2));

, потому что вы просто выводите значение действительного указателя.

...