如何在不使用strcpy函数的情况下初始化struct中的字符串?

时间:2017-08-19 23:28:21

标签: c struct initialization strcpy

是否有任何手动方式来初始化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;
}

3 个答案:

答案 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,尽管效率不高。

否则,如果不是初始化,而是对结构的数据成员的赋值,那么确实你必须至少使用strcpystrncpy

答案 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;
}