この些細な問題を 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 work?
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 *' から型 'char[20]' に代入するときに互換性のない型です</p>
C (C++ ではない) には String 型がなく、代わりに s の配列を使用することを理解しています。そのため、これを行う別の方法は、例の構造体をs のchar
ポインターを保持するように変更することでした。char
#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;
}
これは期待どおりに機能しますが、これを行うより良い方法があるかどうか疑問に思います。