【问题标题】:Type of parameter accepted by strcpy() ?strcpy() 接受的参数类型?
【发布时间】:2011-07-30 07:42:14
【问题描述】:

为什么strcpy() 接受字符数组指针,即使strcpy 的定义是 char * strcpy( char * , const char * )??

#include <stdio.h>
#include <string.h>

main()
{
    char str[] = "Have A Nice Day";
    char ptr[17];

    strcpy(ptr, str);
    printf("%s", ptr);

}

【问题讨论】:

标签: c string strcpy


【解决方案1】:

数组不是指针(尽管它们在行为和用法上相似),但它在需要指针的上下文中透明地衰减为一个(例如在它作为参数传递给期望的函数的情况下)一个指针)。

更深入的描述可以在C FAQ 6.3中找到。

【讨论】:

    【解决方案2】:

    char[n] 给出一个地址,该地址可以用来代替声明时分配内存的 const 指针。

    【讨论】:

    • A char[] 不是 const 指针,它是不完整的数组类型。两者不等价。尝试编译 extern char a[]; char f() { return a[0]; }extern char* const a; char f() { return a[0]; } 并查看差异。
    【解决方案3】:

    在 C/C++ 中,数组也是指针。 http://www.cplusplus.com/forum/articles/9/更多解释请看这里。

    【讨论】:

    • 数组不是指针。但是数组标识符可以隐式转换为指向第一个数组元素的指针。
    • 来自链接的文章:“指针和数组的区别我在很多地方看到将数组作为指针引入。这在技术上是不正确的。数组不是指针。那么它是什么? 它就像 C++ 中的任何其他变量一样。”
    猜你喜欢
    • 2016-07-02
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多