проблема с typedef - PullRequest
       23

проблема с typedef

2 голосов
/ 24 сентября 2010

эй, люди, пожалуйста, скажите мне, правильна ли следующая декларация?

если это так, пожалуйста, объясните

typedef char HELLO[5];

HELLO name;

теперь, какой тип данных называется? [как в символе, целое число и т. д.]

я узнал, что имя будет массивом строк, но при запуске следующей программы я получаю ошибку

#include<stdio.h>

typedef char HELLO[5];

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

ошибка: несовместимые типы при назначении типу "HELLO" из типа "char *"

Ответы [ 2 ]

3 голосов
/ 24 сентября 2010

Ваша проблема не имеет ничего общего с typedef.Ваш тип представляет собой массив символов, также известный как строка стиля ac или строка с нулевым символом в конце для вашего использования.

Вам нужно использовать strcpy или даже лучше strncpy, чтобы скопировать строку в массив символов.В противном случае вы можете использовать тип char* и получить адрес сохраненного строкового литерала, а затем распечатать его.

Я узнал, что имя будет массивом строк, но когдая запускаю следующую программу

Правильный термин будет массивом символов или буфером.Массив строк можно спутать с массивом символов массива.

2 голосов
/ 24 сентября 2010

name имеет тип char[5] - массив из 5 символов.

Определение name таким образом

typedef char HELLO[5];

HELLO name;

эквивалентно определению:

char name[5];

Вы не можете присвоить строковый литерал массиву символов в C, как в вашем примере.Вы должны скопировать символы из литерала в массив.Для этого вы можете использовать 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
...