如何对结构体中的字符串进行赋值

如何对结构体中的字符串进行赋值

对结构体中的字符串赋值,不能直接使用结构体名.结构体成员作为左值,需要借助C语言标准库中的strycpy方法。

  1. 错误赋值格式:结构体名.结构体成员 = 字符串
  2. 正确赋值格式:strcpy(结构体名.结构体成员, 字符串)
  3. 案例代码
#include <string.h>

struct Student{
    int age;
    char name[20];
}

int main()
{
    struct Student s1 = {15,"wangwu"};
    s1.age = 16;				// 1. 结构体基本类型赋值正确语法
   	s1.name = "wangwu"			// 2. 结构体字符串类型赋值错误语法,这是一段错误代码,编译会报错!!!
    strcpy(s1.name, "wangwu"); 	// 3. 结构体字符串类型赋正确语法
    printf("年龄:%d,姓名:%s\n",s1.age , s1.name);
    
    struct Student* p1 = &s1;
    strcpy(p1->name, "wangwu"); // 4. 通过指针,给结构体字符串类型赋
    printf("年龄:%d,姓名:%s\n",p1->age , p1->name);
    return;
}

梳理

  1. 结构体基本类型赋值正确语法:

    • 基本数据类型,直接赋值即可。
  2. 结构体字符串类型赋值错误语法:

    • 想一想,s1.name指的是结构体s1中的数组name的首地址,地址能接收字符串吗?
  3. 结构体字符串类型赋正确语法:

    • strcpy(str2,str1)是C语言中的标注库函数(需要导入string.h头文件),会将str1中的值拷贝1份到str2中(包含“\0”)。

    • 想一想,为什么一定要用拷贝的方式?因为C语言中,是不能一次对数组中的所有元素进行赋值的,只能通过类似for循环的方式对元素逐个进行赋值,strcpy(str2,str1)方法的内部实际就是一个for循环,效果跟如下代码是类似的。

      void my_srtcpy(char* str2, char* str1)
      {
      	while(*str1 != '\0')
      	{
      		*str2 = *str1;
      		str2++;
      		str1++;
      	}
      	*str2 = *str1;	// 最后将‘\0’拷贝过来
      }
      
  4. 通过指针,给结构体字符串类型赋:

    • 方式同梳理3,只不过需要通过p1->name或者(*p1).name先对结构体解引用,拿到结构体中的字符串首地址,在进行拷贝操作。
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值