Мне нужна ваша помощь! Почему в C структурах данных, хранящихся в символьных строках работает только 1 тип декларации: char *name;
работает, но char []name;
не работает.Char string в структуре C
Но когда попробовать объявить строку символов внутри кода (без использования структуры), все работает. Пример кода, иллюстрирующий, что при объявлении массива char работают оба типа объявлений.
#include "funct.h"
#include "stdio.h"
//structure employee name and surname only works when using char* pointers
struct employee {
char *name;
char *surname;
};
int main() {
struct employee worker;
worker.name = "Robert";
worker.surname = "Woz";
printf("\n");
printf("%s", worker.name);
printf("\n");
printf("%s", worker.surname);
printf("\n");
char name[] = "Robert"; //declaration of array with using [] postfix
for (int i = 0; i < 7; i++) {
printf("%c", name[i]);
}
printf("\n");
char *surname = "Woz"; //declaration of array wit using char* pointer
for (int i = 0; i < 4; i++) {
printf("%c", surname[i]);
}
printf("\n");
return (0);
}
выход программы:
Robert
Woz
Robert
Woz
C или C++? Выбери один. –
'char * surname' не объявляет массив; он объявляет указатель. – melpomene
'char * surname =" Woz ";' создает строковый литерал статического времени жизни и назначает 'surname', чтобы указать на него. 'char name [] =" Robert ";' создает массив символов ограниченного времени жизни, массив _not то же самое, что и указатель_, и поэтому у массива есть дополнительная информация, то есть размер, где указатель не знает, как много памяти, на которую он указывает. – George