2015-12-11 193 views
-1

我推送新元素到char数组前面有问题。我在我的程序中有一个函数,它有两个参数:一个指向char数组的指针和一个指向int的指针。该函数用一些数据填充数组,并返回此数组中元素的数量。如何插入,将新元素添加到char数组中

int function1(char* buffer , int* outSize); 

buffer[1000] 
int size; 
result = function1(buffer , &size); 

// after this a get some data in buffer and count how many data is in buffer. let's say 456 elements 
// now a try push to front two new bytes as size this array 

finallBuffer *char = new char[size+2]; 
memcpy(finallyBuffer, (char*)&size, 2); // here a get size in two bytes and put to finnalBuffer 

// next I try just copy to finnalyBuffer received data from Buffer 
strcat(finallyBuffer , buffer); 
doSomething(finallyBuffer); 
delete []finallyBuffer; 

在此之后在finnalyBuffer我只保存大小两个字节。为什么我看不到来自缓冲区的数据

在最后我要实现新表在前面的两个新的字节。这两个字节是大小旧的表。比方说,接收到的数据HEVE只有5个字符

char table[5] = {'a','b','b','c','t'};

所以尺寸为5.5两个字节是char size = {'5','0'};

结果应该是的样子。

char table[5] = {'5','0','a','b','b','c','t'};

+0

你是什么意思“推到前面”? – Olaf

+0

这不是C.不要添加不相关的标签。 – Olaf

+0

你有没有考虑过使用'struct'?它将有2个成员:'int numBytesRead;字符缓冲区[1000]'。 –

回答

1

我不知道确切地知道你想要做什么,但我试图理解它。在代码见下面的意见,我希望它会帮助你。

int function1(char* buffer , int* outSize); 

buffer[1000] 
int size; 
result = function1(buffer , &size); 

// after this a get some data in buffer and count how many data is in buffer. let's say 456 elements 
// now a try push to front two new bytes as size this array 

char *finallBuffer = new char[size*sizeof(char)+2]; 
short ssize = (short)size; 
memcpy(finallyBuffer, &ssize, 2); // here a get size in two bytes and put to finnalBuffer 

// next I try just copy to finnalyBuffer received data from Buffer 

/* NOTE: strcat is for null terminated string. If i understand what you want 
    to do you want store int in 4 bytes ? 
    I assume size is the actual size of the buffer 
*/ 
//strcat(finallyBuffer , buffer); 
memcpy(&finallyBuffer[2], buffer, sizeof(char)*size); 
doSomething(finallyBuffer); 
delete []finallyBuffer; 
+0

我的目的很简单。假设我收到的数据看起来像'char table [5] = {'s','b','v','h','j'}'现在我想**推入,插入前面**两个字节,所以现在新的table1应该看起来像'char table1 [7] = {'x','x','s','b','v','h','j'}'。 Thx提前。 – Mbded

+1

所以你想将大小转换为16位(总是<65536)? –

+0

是的,我想将大小转换为2个字节,并且在插入之后,将这两个字节推到前面,作为[0],[1]元素到新表char。例如在Qt库中,我可以用这种方式http://doc.qt.io/qt-5/qstring.html#prepend – Mbded

0

那些线接错:

finallBuffer *char = new char[size+2]; 
memcpy(finallyBuffer, (char*)&size, 2); 

他们应该是:

char * finalBuffer = new char[size+2]; 
memcopy(finallyBuffer, buffer, size); 

但我真的理解你正在尝试做一些事情。

编辑:

现在我看到你在做什么,奥利弗给了你答案。如果你不想(或不能)为你的缓冲区使用std :: vector,那么无论如何你都可以节省重新分配数组的代价。

  • 刚开始为缓冲区2分配更多字节:char buffer[1002];
  • 然后要存储值,您可以将指针传递给第三个元素:char* ptr = buffer + 2;
  • 当你知道这些数据的实际尺寸,只是把字节buffer[0]buffer[1]

一个结构应建议。

+0

我想复制到[0]和[1]只有2个大小为两个字节.Thx为答案 – Mbded