首页 > 解决方案 > 如何连接两个字符串并保存在C中的第三个变量中?

问题描述

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

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");

其中strDevicename是一个char变量名,每次请求都会改变。问题是当我第一次运行它时,它正在工作,但之后Namea96ed5ÿÿa96ed58e8355.

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

标签: c

解决方案


在您的代码中,数组header的大小由提供的初始化字符串的大小决定,并且它没有任何额外的空间来存储(或附加)任何其他字符。

引用C11,第 6.7.9 章

如果初始化未知大小的数组,则其大小由具有显式初始化程序的最大索引元素确定。数组类型在其初始值设定项列表的末尾完成。

接下来,对于strcat(),来自第 §7.24.3.1 章

strcat函数将 所指向的字符串的副本s2(包括终止空字符)附加到 所指向的字符串的末尾s1。[...]

这表明,目标s1(此处为header)应该有足够的存储空间来保存连接的字符串。

因此,当您运行过去分配的内存时,尝试将strcat()withheader作为源代码会在此处调用未定义的行为。

在用初始化字符串填充后,您需要header留出足够的空间。为数组使用固定大小,在用初始化字符串填充它后,它有很多多余的东西,比如

#define STRSIZ 512

char header[STRSIZ] = "POST /api/add HTT.........

推荐阅读