//数组名是个静态地址值,不能被修改,如果想把数据存储到其中,可以用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;
}

在这里插入图片描述

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐