如何正确分配新的字符串值?

如何正确分配新的字符串值?

我试图理解如何以最干净/最安全的方式用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’中:main.c:18:错误:当从类型‘char*’分配给类型‘char[20]’时,不兼容类型

我知道C(不是C+)没有字符串类型,而是使用字符数组,因此另一种方法是修改示例结构以保存字符的指针:

#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;}

这如预期的那样有效,但我不知道是否有更好的方法来做到这一点。谢谢。


aluckdog
浏览 419回答 3
3回答

跃然一笑

将字符串视为抽象对象,将char数组视为容器。字符串可以是任意大小的,但容器必须至少比字符串长度多1(以容纳空终止符)。C对字符串的语法支持很少。没有字符串运算符(只有char-数组和char-指针运算符)。你不能分配字符串。但是你可以调用函数来帮助你实现你想要的。这个strncpy()函数可以在这里使用。为了最大限度的安全起见,我建议遵循以下模式:strncpy(p.name,&nbsp;"Jane",&nbsp;19);p.name[19]&nbsp;=&nbsp;'\0';&nbsp;//add&nbsp;null&nbsp;terminator&nbsp;just&nbsp;in&nbsp;case也请看一下strncat()和memcpy()职能。
打开App,查看更多内容
随时随地看视频慕课网APP