typedef问题

时间:2010-09-24 19:29:20

标签: c types char typedef character

嘿,人们请告诉我以下声明是否正确?

如果是那么请解释

typedef char HELLO[5];

HELLO name;

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

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

#include<stdio.h>

typedef char HELLO[5];

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

错误:从类型'char *'

中分配类型'HELLO'时出现不兼容的类型

2 个答案:

答案 0 :(得分:3)

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

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

  

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

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

答案 1 :(得分: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