如何连接两个字符串并保存在C中的第三个变量中?

维沙尔

我已经定义了一个char带有预定义HTTP发布字符串数组,如下所示:

char header[] = "POST /api/add HTTP/1.1\r\nHost: xxxxxxx:3000\r\nContent-Type: application/octet-stream; charset=utf-8\r\nContent-Length: 500\r\nName: ";

strcat(header, strDevicename); \\
strcat(header, "\r\n\r\n");

其中strDevicenamechar变量名改变每个请求。问题是,当我运行它的第一次,这是工作,但该覆盖掉后Namea96ed5ÿÿa96ed58e8355

在HTTP发布标头中使用C语言添加具有一个实时更改变量的两个字符串的最佳方法是什么?

聚丙烯

问题是您正在[str]串联到一个header没有多余空间的数组()(C数组的大小无法更改)。

snprintf 可能更适合这里。

如果您知道的最大可能长度strDevicename,则可以使用固定大小的缓冲区:

const char header[] = "POST /api/add HTTP/1.1\r\nHost: xxxxxxx:3000\r\nContent-Type: application/octet-stream; charset=utf-8\r\nContent-Length: 500\r\nName: ";
const char tail[] = "\r\n\r\n";
char buf[(sizeof header - 1) + MAX_DEV_LENGTH + (sizeof tail - 1) + 1];
/* sizeof would count the null byte in header & tail arrays. */
snprintf(buf, sizeof buf, "%s%s%s", header, strDevicename, tail);

如果strDevicename长度未知,则可以使用asprintf(GNU函数):

char *buf = NULL;
if (asprintf(&buf, "%s%s%s", header, strDevicename, tail) == -1) {
   /* handle memory allocation failure */
}

...

free(buf);

如果您asprintf不可用,则可以使用分配自己足够的内存(与上面一样)malloc,然后使用snprintf

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

awk-连接两个字符串变量并分配给第三个

如何将两个字符串连接成第三个字符串而不进行复制?

从日志文件中拉出两个字符串之间的行,中间有第三个字符串

如果在这两个字符串之间还存在第三个字符串,则提取两个字符串之间的文本-Pyspark

R-比较两个字符串变量,并根据比较结果得出第三个变量

在给定的两个字符串的帮助下构造第三个字符串

匹配包含第三个字符串的两个字符串之间的所有内容

如何在SQL Server中自动连接三个字符串的前两个字符

如何检查子字符串是否可以在两个字符串中找到但不能在第三个字符串中找到?

如何比较两个字符串数组并找到公共字符串数组的索引号并将其应用于第三个字符串数组?

awk +如何在两个字符上捕获第三个字段

程序查找两个字符对,但不查找第三个

从Java中的第三个字符开始对字符串进行排序

更改形状标记取决于 matplotlib 中的第三个字符串变量

合并两个字典列表以在 python 中创建第三个

如何打印字符串的每个第三个字符?java的

在delphi中替换字符串中每个第三个字符的最佳方法

如何在C ++中连接两个字符串?

如何在C中连接两个字符串?

通过R中匹配的第三个字符串/因数绘制数据

计算两个字段并在第三个字段中设置结果

AWK:比较两个文件中的子字符串并写入第三个文件

Python:连接两个字符串以从类中获取变量

在Python的Tornado框架中连接两个字符串变量

在Django中,如何添加两个字段的内容并在第三个字段中显示结果?

如何在表单中添加两个字段并使用 Redux Form 在第三个字段中显示

R:通过第三个字符串变量将参数名称以点(...)传递

如何使用逗号分隔python中变量中的两个字符串

如何在Java中连接两个字符串?