Как вернуть и распечатать начальный адрес первой строки (string1)?

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

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

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

person Michael Cruz    schedule 18.04.2020    source источник
comment
int length2 = strlen(str2); for(i = 0; i < length2; i ++ ) сбегает str2 дважды. for(i = 0; str2[i]; i ++ ) только один раз. Оба правильно, второй скорее всего быстрее.   -  person chux - Reinstate Monica    schedule 18.04.2020
comment
Спасибо за совет, я видел, как мой друг так писал. Но я не знаком с этим, поэтому я не пробовал таким образом, лол   -  person Michael Cruz    schedule 18.04.2020


Ответы (2)


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

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

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

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

person chux - Reinstate Monica    schedule 18.04.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));

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

person Vlad from Moscow    schedule 18.04.2020