如何 return 并打印出第一个字符串(string1)的起始地址?

How do I return and print out the starting address of the first string (string1)?

我先把第二个字符串复制到第一个字符串中。然后我将从函数 return string1 指针。然后我用 %p 和 (void*) 打印出第一个字符串的起始地址。这是正确的方法吗?

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

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

How do I return and print out the .... address of the ... string?
I use "%p" and (void*) to print out the starting address of the first string. Is this the right approach?

是的。 return 是正确的,"%p" 期望匹配 void *。然而,由于 char *void * 的编码和大小相同,因此两者都可以。

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

因此,最好根据您所在小组的风格指南进行选择。

函数声明应如下所示

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));

因为你只是在输出一个有效指针的值。