Я пытаюсь понять, как решить эту тривиальную проблему в C самым чистым / безопасным способом. Вот мой пример:
#include <stdio.h>
int main(int argc, char *argv[])
{
typedef struct
{
char name[20];
char surname[20];
int unsigned age;
} person;
//Here i can pass strings as values...how does it works?
person p = {"John", "Doe",30};
printf("Name: %s; Age: %d\n",p.name,p.age);
// This works as expected...
p.age = 25;
//...but the same approach doesn't work with a string
p.name = "Jane";
printf("Name: %s; Age: %d\n",p.name,p.age);
return 1;
}
Ошибка компилятора:
main.c: в функции «main»: main.c: 18:
ошибка: несовместимые типы при
присвоение типу 'char [20]' из типа
‘Char *’
Я понимаю, что C (не C ++) не имеет типа String и вместо этого использует массивы символов, поэтому другой способ сделать это - изменить пример структуры, чтобы она содержала указатели символов:
#include <stdio.h>
int main(int argc, char *argv[])
{
typedef struct
{
char *name;
char *surname;
int unsigned age;
} person;
person p = {"John", "Doe",30};
printf("Name: %s; Age: %d\n",p.name,p.age);
p.age = 25;
p.name = "Jane";
printf("Name: %s; Age: %d\n",p.name,p.age);
return 1;
}
Это работает, как и ожидалось, но мне интересно, есть ли лучший способ сделать это. Спасибо.