结构内字符数组的赋值以及字符串的strcpy和memcpy的用法区别

//数组名是个静态地址值,不能被修改,如果想把数据存储到其中,可以用memcpy()函数进行内存拷贝,或采用循环进行赋值

结构内字符数组的赋值

#include <stdio.h>
#include <string.h>//非常重要,不然输不出 
 #include<iostream>
 using namespace std;
struct{
char mark[12];
int num1;
double num2;
}t1,t2,t3;//t1,t2,t3是对象 

int main()
{

string 创建的用法

//方法·1 
	 string s,ss;
    s.resize(100);//相当于给s开辟空间
    cin>>ss;
    for(int i=0;i<ss.length();i++)
        s[i]=ss[i];
    cout<<s<<endl;//空间开辟大了输出空格
//方法.2 
string s,ss;
cin>>ss;
s="";//必须有,类似python,java的直接形成字符串 
for(int i=0;i<ss.length();i++)
{
    s+=ss[i];
}
cout<<ss<<endl;
//  更深入的来说:s这个string类型的对象并非单单只有字符串,其内还有许多用于操作的函数,于是&s并非字符串“中国”的首地址,而是s这个对象的首地址。
string s = "中国";
printf("%s" , s.c_str());
//string中c_str()成员方法返回当前字符串的首字符地址
cout<<s;//string中重载了“<<”操作符

char数组

void *memcpy(void *str1, const void *str2, size_t n)	
 例如: memcpy(d, s+11, 6);// 从第 11 个字符(r)开始复制,
 连续复制 6 个字符(runoob)
char * strcpy(char * strDest,const char * strSrc);
t1.num1=1;
t1.num2=1.1;
    //方法一:memcpy函数 
     const char src[50]="hello";
   memcpy( t1.mark, src, strlen(src)+1); 
//方法二:strcpy函数 
 strcpy( t1.mark,"hello" ); 
printf("t1=[%s %d %f]\n", t1.mark,t1.num1,t1.num2 );
memcpy( t2.mark, t1.mark, sizeof(t2.mark) ); //只对t2.mark数组赋值
printf("t2=[%s %d %f]\n", t2.mark,t2.num1,t2.num2 );
cout<<"\n\n";


t2.num1=2;
t2.num2=2.3;
printf("t1=[%s %d %f]\n", t1.mark,t1.num1,t1.num2 );
printf("t2=[%s %d %f]\n", t2.mark,t2.num1,t2.num2 );
cout<<"\n\n";

//其他可以直接赋值
t3.num1=t2.num1;
t3.num2=t1.num2;
printf(“t3=[%s %d %f]\n”, t3.mark,t3.num1,t3.num2 );

t2=t1 ; //结构体完整拷贝
printf("t1=[%s %d %f]\n", t1.mark,t1.num1,t1.num2 );
printf("t2=[%s %d %f]\n", t2.mark,t2.num1,t2.num2 );

}

一些区别:

#include<stdio.h>
#include<string.h>
 //strcpy和memcpy覆盖区别 
int main(void)
{
  char src[] = "***";
  char dest[] = "abcdefg";
  printf("使用 memcpy 前: %s\n", dest);
  memcpy(dest, src, strlen(src));
  printf("使用 memcpy 后: %s\n", dest);
     char src1[] = "+++";
  strcpy(dest,src1);
  printf("使用 strcpy 后: %s\n", dest);
  return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广大菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值