【问题标题】:how can strcpy function accept both adress as well as string constant?strcpy 函数如何同时接受地址和字符串常量?
【发布时间】:2017-04-06 16:17:58
【问题描述】:
void main() 
{
    char str1[10], str2[10] = "haha";
    strcpy(str1, str2);
    puts(str1);
    strcpy(str1, "tictoc");
    puts(str1) ;
} 

如上代码所示,如​​何通过 c 语言中的预定义 strcpy 函数将地址和字符串常量传递给指针变量?

【问题讨论】:

  • str1 和 str 不是常量。 str 变量有一个值,但它不是const。传递给strcpy()的参数都是变量的地址。
  • str2 未定义。

标签: c function pointers strcpy


【解决方案1】:

当一个数组被传递给一个函数时,它会衰减为一个指向第一个元素的指针。

在第一次调用的情况下,str1str 的类型均为 char [10]。当传递给strcpy 时,这些每个都会衰减到char *。同样,字符串常量"tictoc" 的类型为char [7](字符串中每个字符一个字节加上终止的空字节),它也衰减为char *

需要const 参数的函数可以采用相同数据类型的非常量版本。 strcpy 的第二个参数需要 const char *,因此 char * 也将满足此参数。

另一方面,如果您尝试将 const 变量传递给期望非 const 类型的函数,则会生成编译器警告。

【讨论】:

  • 谢谢,你能解释一下 const 是如何执行它的工作的吗,,,,?
  • @SuvashRaj 将const 作为函数参数的一部分,如const char* 保证函数不会修改您传入的数据。这有助于了解您可以修改多少相信该功能可以编辑您提供的数据。这可能是需要的,也可能不是,具体取决于功能和您需要做什么。但是将您的可变 char* 传递给请求 const char* 的函数仅意味着它在该函数中处理时不会被更改。在这种情况下,它只是用于从 const 复制到非 const 。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多