我想知道我怎么能concat两个字符指针,如果它甚至是可能的?我这里有个密码
char* partOne = "1234"; // could have a known N number of bytes
char* partTwo = "5678"; // could have a known M number of bytes
char newPart[N+M];
for(int i= 0; i<N; i++){
newPart[i++] = *partOne++;
}
for(int i = N, j=0; j < M; j++){
newPart[i++] = *partTwo++;
}
std::cout << (char *) newPart << std::endl;
这可能实现吗?
编辑:为了清楚为什么使用char指针是由于UDP套接字。例如:数据我收到我有消息的长度在头
while(!closed){
int bytesReceived = myApi.readData(); // N bytes
if(bytesReceived <= 0){
continue;
}
char *buffer = myApi.getBuffer(); // returns char * buffer
do{
if(startOf(buffer)){
//if true check for length of the message
int messagelen = getMessageLength(buffer);
while(bytesReeceived < messagelen){
char * partialBuffer;
int partialBytesReceived = myApi.readData(); //M bytes
if(partialBytesReceived <= 0) continue;
partialBuffer = myApi.getBuffer();
.....
//concat two pointers here
// update N bytesReceived, N += M;
}
}
} while(*buffer != '\0');
}
实际上,我只能在每次调用更新的char * buffer时访问它。我想考虑来自UDP套接字的部分消息和收到的字节
3条答案
按热度按时间qyuhtwio1#
正确的方法很简单:
sqxo8psd2#
由于您使用的是C风格的字符串(字符数组),因此可以使用
strcpy
和strcat
连接它们。但是,您应该记住,在C++代码中使用C风格的字符串通常是一个坏主意。从缓冲区创建
std::string
对象并使用+
操作符连接它们会更安全。这样做可以减少缓冲区溢出和其他错误的风险。mrzz3bfm3#
在你的例子中,你想要 * 避免 * 字符串连接。(你可以通过构造一个
std::string
和一个std::string_view
来做到这一点,对每个都使用开始指针和长度,然后使用+
操作符,但这是无意义的复制)。相反,安排后续的读取以 append 到您已经拥有的数据。
标准模式如下:
然后,我们存储了
p-buffer
字节,从buffer
开始连续存储。