函数复制引用字符数组中的数据 我如何用C++编写一个函数,把数据放在字符数组中,我不怎么解释,但我会写一个例子< /P> void functionCopyData(char& buf){ // get data from a char variable char data1 = "textdata1"; char data2 = "textdata2" // copy data copy(&buf,data1); copy(&buf,data2); } char variable[20]; functionCopyData(&variable); printf(variable); // return: textdata1textdata2
总之,我需要从两个变量复制数据并放入一个char数组。对不起,如果我不够清楚的话 为什么这样 因为我需要从中获取数据和变量,并在函数请求中发送它一个参考数据函数复制引用字符数组中的数据 我如何用C++编写一个函数,把数据放在字符数组中,我不怎么解释,但我会写一个例子< /P> void functionCopyData(char& buf){ // get data from a char variable char data1 = "textdata1"; char data2 = "textdata2" // copy data copy(&buf,data1); copy(&buf,data2); } char variable[20]; functionCopyData(&variable); printf(variable); // return: textdata1textdata2,c++,function,pass-by-reference,C++,Function,Pass By Reference,总之,我需要从两个变量复制数据并放入一个char数组。对不起,如果我不够清楚的话 为什么这样 因为我需要从中获取数据和变量,并在函数请求中发送它一个参考数据sendFunction(&data,sizeVar) 如何做到这一点?一个简单的解决方案是编写一个函数来复制一个数组,然后使用指向结果数组中不同位置的不同指针调用它两次 例如,如果您有char data[20]来保存结果,并且希望复制两个数组char a[10]和char b[10],则编写一个函数 void copy(char* dest
sendFunction(&data,sizeVar)代码>
如何做到这一点?一个简单的解决方案是编写一个函数来复制一个数组,然后使用指向结果数组中不同位置的不同指针调用它两次
例如,如果您有char data[20]
来保存结果,并且希望复制两个数组char a[10]
和char b[10]
,则编写一个函数
void copy(char* destination, char* source, int length)
将长度
字节从源复制到目标,然后用
copy(data, a, 10);
copy(data+10, b, 10);
功能和可帮助您:
#include <string.h>
void functionCopyData(char buf[]){
char data1[] = "textdata1";
char data2[] = "textdata2";
strcpy(buf, data1);
strcpy(buf+strlen(buf), data2);
}
...
functionCopyData(variable);
...
#包括
void functionCopyData(char buf[]){
char data1[]=“textdata1”;
char data2[]=“textdata2”;
strcpy(buf,数据1);
strcpy(buf+strlen(buf),数据2);
}
...
functionCopyData(变量);
...
我认为更清楚的是使用指针,而不是引用
<如何在C++中编写将数据放在字符数组中的函数?
更改参数类型
void functionCopyData(char& buf){
如果您只想更新一个字符,而不是一个字符数组,这将很好。要更新字符数组,请使用:
void functionCopyData(char buf[]){
或
如果buf
没有足够的内存来存储数据,这很容易导致问题。要使函数更健壮,请传递一个表示buf
容量的数字
void functionCopyData(char buf[], size_t capacity){
修正data1
和data2
的定义
char data1 = "textdata1";
char data2 = "textdata2"
// You need the additional 1 for the terminating null
// character.
size_t capacityNeeded = strlen(data1) + strlen(data2) + 1;
if ( capacityNeeded > capacity )
{
// Deal with the problem.
}
else
{
// Now copy the contents of data1 and data2 to buf
}
在语法上无效。将其更改为:
char data1[] = "textdata1";
char data2[] = "textdata2";
或
确保buf
可以容纳data1
和data2
char data1 = "textdata1";
char data2 = "textdata2"
// You need the additional 1 for the terminating null
// character.
size_t capacityNeeded = strlen(data1) + strlen(data2) + 1;
if ( capacityNeeded > capacity )
{
// Deal with the problem.
}
else
{
// Now copy the contents of data1 and data2 to buf
}
使用标准库函数将内容data1
和data2
复制到buf
strcpy(buf, data1);
strcat(buf, data2);
修复对函数的调用
functionCopyData(&variable);
在给定函数声明的情况下,不是用于调用函数的正确语法。使用:
functionCopyData(variable, 20);
是否有理由使用C样式字符串(<代码> char []/COD>),而不是C++的“代码> STD::String < /Cord>?是的,这是因为我正在为ARDUIO编写这个脚本,这比我想要的要近,但是我有一个小问题。听着,我用Arduino中的RF模块将这些信息发送给Raspberry Pi(python)。当我用Raspberry Pi中的这个函数发送数据时,我收到了数据,但有一个奇怪的simbols。但是如果我这样做charvar[20]={'t','e','x','t}
我正确地收到了它。前一个函数是否与前一个句子相等?您的语言有点不清楚(函数是否与句子相等?),但我认为您误解了数组。当您声明char var[20]={t'、'e'、'x'、't'}
时,数组后面的16个元素包含一些内容。如果你没有在Pi上看到它们,那是因为你的Pi使用了一些不打印某些字符的惯例。要么你关心这些元素的价值,要么你不关心,如果你关心,那么你应该告诉我们它们应该是什么。我的问题是,当我使用该函数时,它会满足我的要求。但当我在RPi中看到输出时,它与我所期望的略有不同。它显示文本textdata1textdata2
,然后显示3或4个奇怪的符号。但是,如果我手动创建这种数组char var[20]={t'、'e'、'x'、't'}
RPi中的输出是我所期望的text
,没有任何奇怪的simbol。那么,为什么我用这个函数得到了那个simbols呢?@GEPD:因为text
之后的字符与textdata1textdata2
之后的字符不同,而且你的Pi对它们做了一些不同的处理。mystake不是因为这个函数,当我发送数据时,我使用的是sizeof
而不是strlen
这都是问题所在,但是谢谢你,你的函数也帮了我很大的忙!该函数的结果与此等价:char-var[20]={t'、'e'、'x'、't'}
如果不是,我该怎么做?@GEPD,您说过希望结果是textdata1textdata2
。如果您希望结果为text
,那么您提出的是一个完全不同的问题。是的,我认为这是解决问题的方法,但现在测试了它,我得到了不同的结果。这样做的方法是为循环更改strcpy?@GEPD,如果我理解正确,您希望结果是textdata1textdata2
,但您没有得到该结果。这就是你说的吗?我得到了这个结果:textdata1textdata2
但是当我看到接收数据的设备中的输出时,它就像textdata1textdata2一样被接收▒▒▒▒▒代码>。但是如果我用这个变量char var[20]={t'、'e'、'x'、't'}
手动发送数据,它会显示text
而不是text▒▒▒▒▒我不知道我是否解释得更好
functionCopyData(variable, 20);