【问题标题】:typedef problem类型定义问题
【发布时间】:2011-04-16 23:05:01
【问题描述】:

大家好,请告诉我以下声明是否正确?

如果是,请解释

typedef char HELLO[5];

HELLO name;

现在什么数据类型是名称? [如字符、整数等]

我知道名称将是一个字符串数组,但是当我运行以下程序时出现错误

#include<stdio.h>

typedef char HELLO[5];

void main()
{
    HELLO name;
    name="hey";
    printf("%s",name);
}

错误:从类型“char *”分配给类型“HELLO”时类型不兼容

【问题讨论】:

    标签: c types char typedef character


    【解决方案1】:

    您的问题与 typedef 无关。您的类型是一个字符数组,也称为 c 样式字符串或空终止字符串供您使用。

    您需要使用strcpy 甚至更好的strncpy 将字符串复制到char 数组中。 否则,您可以使用char* 类型,并且您可以获取存储的字符串文字的地址,然后您可以打印它。

    我知道 name 将是一个字符串数组,但是当我运行以下程序时

    正确的术语是字符数组或缓冲区。字符串数组可能会被混淆为数组字符数组。

    【讨论】:

    • 你不想使用strncpy,它不会像你想象的那样做。
    【解决方案2】:

    name 的类型为 char[5] - 5 个字符的数组。

    以这种方式定义name

    typedef char HELLO[5];
    
    HELLO name;
    

    等价于定义:

    char name[5];
    

    您不能将字符串文字分配给 C 中的 char 数组,如您的示例所示。 您必须将字符从文字复制到数组。你可以使用strncpy()

    strncpy(name, "hey", 4); // strlen("hey") == 3. 4 passed to strncpy, as the last
                             // argument causes it to add a null character at the end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 2017-09-11
      • 2013-10-19
      • 1970-01-01
      • 2021-03-19
      • 2013-05-15
      • 2020-07-07
      • 1970-01-01
      相关资源
      最近更新 更多