函数复制引用字符数组中的数据

Function to copy data in a reference char array

本文关键字:数据 数组 字符 复制 引用 函数      更新时间:2023-10-16

我如何用C++编写一个将数据放入char数组的函数,我不知道如何解释,但我会写一个示例

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数组中。很抱歉我不够清楚。

为什么要这样?

因为我需要从和一个变量中获取数据,并在函数请求中发送一个参考数据sendFunction(&data,sizeVar);

我该怎么做?

我如何用C++编写一个将数据放入字符数组的函数

  1. 更改参数类型。

    void functionCopyData(char& buf){
    

    如果你只想更新一个字符,而不是一个字符数组,那就太好了。要更新字符数组,请使用:

    void functionCopyData(char buf[]){
    

    void functionCopyData(char* buf){
    

    如果buf没有足够的内存来存储数据,那么这很容易导致问题。要使函数更加健壮,请传递一个表示buf容量的数字。

    void functionCopyData(char buf[], size_t capacity){
    
  2. 修正data1data2的定义。

    char data1 = "textdata1";
    char data2 = "textdata2"
    

    在语法上无效。将其更改为:

    char data1[] = "textdata1";
    char data2[] = "textdata2";
    

    char const* data1 = "textdata1";
    char const* data2 = "textdata2";
    
  3. 确保buf可以容纳data1data2

    // 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
    }
    
  4. 使用标准库函数将内容data1data2复制到buf

    strcpy(buf, data1);
    strcat(buf, data2);
    
  5. 修复对函数的调用。

    functionCopyData(&variable);
    

    在给定函数声明的情况下,不是用于调用函数的正确语法。用途:

    functionCopyData(variable, 20);
    

一个简单的解决方案是编写一个函数来复制一个数组,然后用指向结果数组中不同位置的不同指针调用它两次。

例如,如果您有char data[20]来保存结果,并且想要复制两个数组char a[10]char b[10],那么编写一个函数

void copy(char* destination, char* source, int length)

它将length字节从源复制到目的地,然后用调用它

copy(data, a, 10);
copy(data+10, b, 10);

函数strcpystrlen可以帮助您:

#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){
   // 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);

我认为使用指针而不是引用更清楚。