首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接一个char[]和一个*char[]

连接一个char[]和一个*char[]
EN

Stack Overflow用户
提问于 2020-12-17 22:08:07
回答 2查看 43关注 0票数 1

我有一个char数组

代码语言:javascript
复制
    char DATA[] = "POST / HTTP/1.1\r\nHost: pipedream.net\r\nContent-Type: 
    application/json\r\nContent-Length: 28\r\n\r\n{\"key\": \"\"}";

有一个函数

代码语言:javascript
复制
char *retKey(char key[]){
   // Some processing
   return key;
}

如何将retKey()函数返回的键连接到前面提到的DATA?它基本上应该看起来像这样

代码语言:javascript
复制
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请求,我尝试

代码语言:javascript
复制
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[]之后,我最终得到了一些垃圾输出。

EN

回答 2

Stack Overflow用户

发布于 2020-12-17 22:12:51

您不能将任何连接的输出存储到DATA,因为它的大小由初始值设定项字符串决定,并且不能修改。

您需要执行以下任一操作

  • 使用单独的缓冲区,长度最小( DATA的长度+要追加的字符串的长度+ 1)

  • 使用足够大的大小定义DATA数组,以便它可以容纳连接的输出。

在那之后,我认为相当于连接,你需要一个格式化的替换。您应该使用转换说明符形成一个字符串,如

代码语言:javascript
复制
 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()将其打印到另一个缓冲区,其值如下

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-12-17 22:16:11

可以使用strcat连接字符串,前提是字符数组足够大,可以接受新字符。如果不是,您应该分配一个足够大的新数组来包含结果:

代码语言:javascript
复制
char * newkey = retkey(key);
char *data = malloc(1 + strlen(newkey) + strlen(DATA);
strcpy(data, DATA);
data[strlen(data) - 2] = '\0';    //remove last to characters ("})
strcat(data, newkey);
strcat(data, "\"}");              // add them back after the key
...    // use data
free(data);

注意,为了方便起见,这里省略了正确分配的测试,但在实际编程中应该是必需的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65342310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档