gpt4 book ai didi

连接两个字符串,中间为空

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:24 25 4
gpt4 key购买 nike

我正在尝试构建一个由两个变量组成的字符串,这两个变量被一个空终止符分开。对于我们正在使用的自定义协议(protocol),必须以这种方式完成。

const char* vendorChar = "3333-3333-4444-aaa3-3333";
const char* userChar = "someUsername";

char usernameString[strlen(vendorChar) + strlen(userChar) + 1];
char* uPtr = usernameString;

strcpy(uPtr, vendorChar);
strcpy(uPtr+strlen(vendorChar)+1, userChar);

当我运行上面的代码时,它只发送 vendorChar 的值而忽略 userChar。当它工作时它应该看起来像

4444-2222-3333-1111\0someUsername

到目前为止,我已经了解到 str 函数会删除它在字符串末尾看到的空值。我想我必须使用 memcpy 来保存它,但我不知道该怎么做。

最佳答案

你的假设是对的,strcpy 可能会复制到中间的空字符,根据 this , strcpy(char *str1, const char *str2) 这样做:

Copies the string pointed to by str2 to str1. Copies up to and including the null character of str2. If str1 and str2 overlap the behavior is undefined.

memcpy 应该可以解决问题,因为它只是将内存视为字节 block ,而不是字符串。

strcpy 签名:

char *strcpy(char *dest, const char *src);

memcpy 签名:

void *memcpy(void *dest, const void *src, size_t n);

所以只需替换名称并添加累积长度(当然,两个空字符)。

编辑

为了消除此处提出的一些疑问,请考虑以下代码:

#include "string.h"
#include "stdio.h"
int main() {

char x[10] = {0};
char y[10];
char z[10];
x[0] = x[1] = x[5] = 'a';
memcpy(y,x,10);
strcpy(z,x);
printf ("y[5]= %s\n", &y[5]);
printf ("z[5]= %s\n", &z[5]);
return 0;
}

结果是:

y[5]= a
z[5]=

很明显 memcpy 移动了整个长度,包括字节 [5],而 strcpy 没有,在空终止处停止

关于连接两个字符串,中间为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com