我正在尝试理解如何以最干净/最安全的方式解决这个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;
}
编译器报错如下:
我理解C语言(不是C++)没有String类型,而是使用字符数组,因此另一种方法是修改示例结构体以保存字符指针。main.c: In function ‘main’: main.c:18: error: incompatible types when assigning to type ‘char[20]’ from type ‘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;
}
这个方法运行正常,但我想知道是否有更好的方法来实现这一点。
char *s; s = "foobar";
,与数组不同,它实际上是有效的。我的意思是我不能这样做char s[9]; s = "foobar"
。在这两种情况下,我们都试图将字符串值分配给s
,不是吗? - mayankkaizen