c - 连接一个 char[] 和一个 *char[]
问题描述
我有一个char
数组
char DATA[] = "POST / HTTP/1.1\r\nHost: pipedream.net\r\nContent-Type:
application/json\r\nContent-Length: 28\r\n\r\n{\"key\": \"\"}";
有一个功能
char *retKey(char key[]){
// Some processing
return key;
}
如何将从retKey()
函数返回的键连接到前面提到的键DATA
?它应该基本上看起来像这样
char DATA[] = "POST / HTTP/1.1\r\nHost: pipedream.net\r\nContent-Type:
application/json\r\nContent-Length: 28\r\n\r\n{\"key\": \"<key returned from retKey>\"}";
为了发出最终的 POST 请求,我尝试了
char DATA[] = "POST / HTTP/1.1\r\nHost: pipedream.net\r\nContent-Type:
application/json\r\nContent-Length: 28\r\n\r\n{\"key\": \"\"}";
char key[16];
retKey(key);
strcat(DATA, key);
但我最终得到了一些垃圾输出DATA[]
。
解决方案
您不能将任何串联输出存储到DATA
,因为它的大小由初始化字符串确定,并且无法修改。
你需要要么
使用一个单独的缓冲区,最小长度(长度
DATA
+ 要附加的字符串长度 + 1)用足够大的大小定义
DATA
数组,以便它可以保存连接的输出。
在那之后,我认为相当串联,你需要一个格式化的替换。您应该使用转换说明符形成一个字符串,例如
char DATA[] = "POST / HTTP/1.1\r\nHost: pipedream.net\r\nContent-Type:
application/json\r\nContent-Length: 28\r\n\r\n{\"key\": \"%s\"}";
然后,用于sprintf()
将其打印到另一个缓冲区,并带有值,例如
char dest[256]; //select the size based on your final output
sprintf(dest, data, retKey(key)); // assuming retkey(key); call returns the value for key
推荐阅读
- python - 在类定义中加入从字典理解访问类变量时出错
- sql - pg_stat_statements 的时间范围是什么
- python - 如何在没有 conda 的情况下从源代码安装 Bob
- tor - 如何知道 Tor 路由的 IP 地址?
- node.js - 如何保证最新的写入不会被先前的写入覆盖
- ssl - 无法“openssl 验证”letsencrypt 证书
- javascript - 在文本文件中使用 DOM 解析器
- javascript - 使用 JSON 创建 Bootstrap TreeView
- ios - 防止 UINavigationBar 在 UITableView 滚动 iOS 11 上增长
- javascript - decodeString:正则表达式解决方案