是否有任何手动方式来初始化struct中的字符串?我曾经使用strcpy函数初始化struct in struct,如:
typedef struct {
int id;
char name[20];
int age;
} employee;
int main()
{
employee x;
x.age=25;
strcpy(x.name,"sam");
printf("employee age is %d \n",x.age);
printf("employee name is %s",x.name);
return 0;
}
答案 0 :(得分:7)
严格地说这个
strcpy(x.name,"sam");
不是初始化。
如果要谈论初始化,那么你可以通过以下方式实现
employee x = { .name = "sam", .age = 25 };
或
employee x = { .name = { "sam" }, .age = 25 };
这相当于以下初始化
employee x = { 0, "sam", 25 };
或
employee x = { 0, { "sam" }, 25 };
或者您甚至可以使用employee
类型的复合文字来初始化对象x
,尽管效率不高。
否则,如果不是初始化,而是对结构的数据成员的赋值,那么确实你必须至少使用strcpy
或strncpy
。
答案 1 :(得分:-1)
您可以编写自己的strcpy
版本:
void mycopy(char *dest, const char *source, size_t ndest)
{
assert(ndest != 0);
while (--ndest > 0 && (*dest++ = *source++))
;
}
您不再使用strcpy
了。而且它更安全。
答案 2 :(得分:-1)
最大值 - 包括尾随零
char *mystrncpy(char *dest, const char *src, size_t max)
{
char *tmp = dest;
if (max)
{
while (--max && *src)
{
*dest++ = *src++;
}
*dest++ = '\0';
}
return tmp;
}