Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数复制引用字符数组中的数据 我如何用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 - Fatal编程技术网

函数复制引用字符数组中的数据 我如何用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++编写一个函数,把数据放在字符数组中,我不怎么解释,但我会写一个例子< /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

总之,我需要从两个变量复制数据并放入一个char数组。对不起,如果我不够清楚的话

为什么这样

因为我需要从中获取数据和变量,并在函数请求中发送它一个参考数据
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);