【问题标题】:assigning char pointer to char and char array variable将 char 指针分配给 char 和 char 数组变量
【发布时间】:2013-03-15 03:19:18
【问题描述】:

为什么下面的没问题?

    char *a;
    char b[]="asdf";
    a=b;

但以下不是?

    char a[10];
    char b[]="asdf";
    a=b;

上面给出了错误:分配中的类型不兼容。

【问题讨论】:

  • 我发现您不太可能在第一个示例中至少没有收到一些警告。您能否发布编译器的完整输出?

标签: c pointers char


【解决方案1】:

两个都不行。

也许你在尝试,

char *a;
char b[]="asdf";
a=b;

【讨论】:

  • 其实第一个是合法的,但可能不是本意。
  • @CongXu,是的,这些初学者一定知道,编译的都是不对的!!
  • 它可以是“正确的”。例如,如果 'a' 是指向 int 的指针,这将是一种可接受的做法。它在没有警告的情况下编译的事实可能表明允许分配的理由。
【解决方案2】:
char a;
char b[]="asdf";
a=b;

在这里,您将数组b 的地址分配给a,它是char 类型。地址的大小将为 4 个字节(64 位 m/c 中的 8 个字节),您将其分配给 1 个字节 char 变量 a,因此这些值将被截断。这是合法的,但没有用。

我认为您实际上是在尝试将b 数组的第一个字符分配给a。在这种情况下,请执行a = b[0]

【讨论】:

    【解决方案3】:

    数组的值等于数组中第一个元素的地址。所以基本上,它是一个常数值。这就是为什么当您尝试在第二个示例中执行 a=b 时,您正在尝试执行类似于 2=7 的操作,只是您有两个地址而不是 2 个整数。

    现在第一个示例可以运行是有道理的,因为将地址分配给指针是有效的操作。

    【讨论】:

      【解决方案4】:

      您需要为字符串库包含以下标头。

      #include <string.h>

      如果有足够的空间,使用 strcpy(strX, strY); 会将字符串 Y 复制到字符串 X 中。

      【讨论】:

      • strcpy() 确实检查是否有足够的可用空间,实际上它没有办法这样做。您可以使用strncpy() 来控制您不会缓冲溢出,但您可能需要手动插入最终的空字节。
      【解决方案5】:

      请使用 c++ 的 strcpy_s 函数,它的语法是 &dest,*source 它可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-10-26
        • 2018-10-06
        • 2023-03-08
        • 2011-04-02
        • 1970-01-01
        • 2014-07-17
        • 2021-01-26
        • 2011-02-23
        • 1970-01-01
        相关资源
        最近更新 更多