怎样把一个char数组赋值给另一个char数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样把一个char数组赋值给另一个char数组?相关的知识,希望对你有一定的参考价值。

我的一个数组char1,大小是1024,但里面数据只有“abcdefg”,后面就为空。另一个数组是char2,大小等于“abcdefg”,即为7.我想要把char1复制给char2.该怎么办呢???c++

参考技术A

简单的可以使用memcpy,举个例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) 
char a[30];
char b[25]="abcdefgagh";

memcpy(a,b,strlen(b));
//a使用字串形式打印
a[strlen(b)]='\\0';
printf("a=%s\\n",a);
return 0;

参考技术B #include <string>
using namspace std;

//char2最好有8个字节,因为末尾要有'\0'
strncpy( char2, char1, 8 );

PS.strcpy()不会自动开辟空间;
参考技术C void CCoinDispensorDlg::OnDis3() //Hopper 3 Dispense coins

// TODO: Add your control notification handler code here
UpdateData();
unsigned char buf[32];
//request cirher key 3
unsigned char tx7[5] = 0x00, 0x00, 0x01, 0xF2, 0x00;
unsigned char xu3, lie3, hao3;
if((m_Edit6>=3)&&(m_Edit6<=10))

if((m_Edit14>=1)&&(m_Edit14<=255))

tx7[0]=m_Edit6;
tx7[4]=tx7[0] + tx7[1] + tx7[2] + tx7[3];
tx7[4] = 0xff - tx7[4] + 1;
mySerial.SendData((const char *)&(tx7[0]), 5);
DWORD t7 = ::GetTickCount();
for (;;)

if ((t7 + 200) <= ::GetTickCount())

// Sleep(500);
mySerial.ReadData((void *)buf, 10);
int cnt = mySerial.ReadData((void *)buf, 32);
if(cnt ==13)

if ((buf[5] == 1)&&(buf[6] == 3)&&(buf[7] == m_Edit6))

xu3 = buf[9];
lie3 = buf[10];
hao3 = buf[11];


memset((void *)buf, 0, 32);
break;




//dispense coin 3
unsigned char tx8[9] = 0x00, 0x04, 0x01, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00;
if((m_Edit6>=3)&&(m_Edit6<=10))

tx8[0]=m_Edit6;
tx8[4]=xu3;
tx8[5]=lie3;
tx8[6]=hao3;

if((m_Edit14>=1)&&(m_Edit14<=255))

tx8[7]=m_Edit14;
for (int i = 0; i < 8; i++)

tx8[8] += tx8[i];

tx8[13] = 0xff - tx8[13] + 1;
mySerial.SendData((const char *)&(tx8[0]), 9);
DWORD t8 = ::GetTickCount();
for (;;)

if ((t8 + 200) <= ::GetTickCount())

mySerial.ReadData((void *)buf, 15);
// if ((buf[14] == 1)&&(buf[15] == 1)&&(buf[16] == m_Edit6)&&(buf[18] == m_Edit14))
memset((void *)buf, 0, 32);
break;





下面是执行结果,把buf数组里面的第9,10,11元素64,98,22,拿出来放入第二个数组tx8的4、5、6元素位置,执行后缺不是64,98,22,确是cc,cc,cc,为什么?
参考技术D 直接用strcpy(char2,char1);就可以了,函数自动为char2开辟空间。 第5个回答  推荐于2017-09-05 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(int argc, char * argv[])

char b[8] = "abcdefg";
char a[1024];
int i;
strcpy(a,b);
printf("a=%s\n",a);
printf("b=%s\n",b);
本回答被提问者采纳

指针赋值,报错

很简单的一个语句
char *str = "abcdefg";
str[0]='a'; 为什么报错(我也不知道报什么错,程序就终止掉了)
char str[] = "abcdefg";
str[0]='a';为什么不报错

这涉及到char指针和char数组的关系、区别,你这里就是一种情况;
定义char str[] = "abcdefg";这样一个数组,实际上是申请了8个char大小的空间,既然申请了空间当然可以对这个空间随意赋值。。
定义char *str = "abcdefg";这样一个指针只是定义了一个变量,并没有申请空间,那你对str[0]这个空间进行操作自然报错,因为这个空间根本就不存在。。。追问

非常感谢,方便留个Q吗 我是其他语言转过来的, 弄指针的时候 经常晕..

我还想问你一个问题
char *str; (00000011)
str = malloc(10); (002D0EB0)
这个str 不是一个地址吧, 那正确初始化指针的语句该怎么写那?
char *str = malloc(10);这样吗?

如果我最开始 不知道要给这个指针分多少空间...
char *str <- 这块空间不就浪费了
str=malloc();

追答

char *str;
这句话只是定义了一个str的char类型指针变量,即只分配了一个4字节的指针变量存放的空间,并没有给指针指向的地址分配空间,所以不浪费。。。另外提一点,定义指针时一般提议:
char *str = NULL;
这样可以防止野指针,就像你定义以后,虽然没分配空间,他也指向了一个未知的地址,当你访问这个地址时就会出现未知的错误。。。切记
你说的2种方法都可以,效果一样的;
char *str;
str = malloc(10);

char *str = malloc(10);
这两个一样,指针可以动态的申请空间,你看一下链表就知道了,链表就是使用动态申请的空间来合理的使用内存。。。
QQ:304960988

参考技术A char str[]= "abcdefg";实际上相当于char str[8]="abcdefg";

定义了一个长度为8的字符数组,注意,这个数组是你自己定义的,所以你能修改它的值。

而char *str = "abcdefg";则仅仅是声明了一个指针变量,

这个变量指向了一个常量字符串"abcdefg",而常量字符串的值是不允许修改的。追问

非常感谢, 能留个Q吗 , 我操作指针的时候 经常晕,, 希望能多多帮忙

追答

1227812201

追问

Q没通过,
我还想问一个问题,截取字符的
比方 strcpy(p1,"abcdefg");
我截取abc放到p2指针指像的空间里
但是这个时候 p1原本空间是8个字节长度,少了abc之后,就空出来了3个字节, 我如何释放掉p1里面的这三个字节的空间那
(我想到的是,用个临时空间导一下,但是来回倒又浪费cpu,有没有直接释放掉这三个字节空间的方法,比方写个函数free(p1,1,3)释放首1-3字节)
是不是正规大项目,都是需要对空间这么精打细算的吧?

追答

没办法释放 除非用了动态数组来放 否则 在p1没释放前 就是8个

追问

1,我还想问一个编程习惯的问题, 是不是在方法里 为指针分配空间 不是一个好习惯吧, 应该先分配好了空间 在方法里面改变指针的内容吧?
-------------------------------
2,我还有一个问题
比如:
struct stu char *c;
struct stu a;
a.c = "abc"; 这样是用等号赋值的

我希望的是变成
a.fun("abc");(为a里的c赋值)
我在fun里 怎么能得到 调用它的是那个a成员那?

追答

a.fun fun难道是定义在结构体里的?

本回答被提问者采纳
参考技术B char *str = “abcdefg”;
表示 str 指向一个常量字符串,不可赋值。

char str[] = "abcdefg";
表示 str为一个字符数组,可以被赋值。
参考技术C 第一个str只是一个指针,不是数组,所以没有str[0]之说,如果要建立动态指针数组,可以先定义一个int n;输入n值 ,再定义char *str=new char[n];就可以了 参考技术D 把错误贴出来看看

以上是关于怎样把一个char数组赋值给另一个char数组?的主要内容,如果未能解决你的问题,请参考以下文章

mfc CFile 读取内容到char数组的问题?

指针赋值,报错

怎样把char型数组转存为int型数组?

c语言结构体中的一个char数组怎么赋值?

VBA中如何把A这列数赋值给数组?谢谢

如何将String类的字符串 赋值给Char数组