首页 > 解决方案 > 连接一个 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[]

标签: cstringcharstrcat

解决方案


您不能将任何串联输出存储到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

推荐阅读