我有一个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[]之后,我最终得到了一些垃圾输出。
发布于 2020-12-17 22:12:51
您不能将任何连接的输出存储到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发布于 2020-12-17 22:16:11
可以使用strcat连接字符串,前提是字符数组足够大,可以接受新字符。如果不是,您应该分配一个足够大的新数组来包含结果:
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);注意,为了方便起见,这里省略了正确分配的测试,但在实际编程中应该是必需的。
https://stackoverflow.com/questions/65342310
复制相似问题