【问题标题】:How do I return and print out the starting address of the first string (string1)?如何返回并打印出第一个字符串 (string1) 的起始地址?
【发布时间】:2020-08-01 03:19:10
【问题描述】:

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

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

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

【问题讨论】:

  • int length2 = strlen(str2); for(i = 0; i < length2; i ++ ) 运行两次 str2for(i = 0; str2[i]; i ++ ) 只有一次。两者都正确,第二个可能更快。
  • 谢谢你的建议,我看到我朋友是这样写的。但我对此并不熟悉,所以我没有尝试过这种方式哈哈

标签: c pointers c-strings strcpy function-declaration


【解决方案1】:

如何返回并打印出 ... 字符串的 .... 地址?
我使用"%p"(void*) 打印出第一个字符串的起始地址。这是正确的方法吗?

是的。返回是正确的并且"%p" 期望匹配void *。然而,由于char *void * 是相同的编码和大小,任何一个都可以工作。

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

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

【讨论】:

    【解决方案2】:

    函数声明应该是这样的

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2013-04-27
      • 1970-01-01
      相关资源
      最近更新 更多