gpt4 book ai didi

c - 如何使用 snprintf 或类似函数 (C) 在 for 循环中连接字符串?

转载 作者:行者123 更新时间:2023-12-04 02:17:52 26 4
gpt4 key购买 nike

我有以下代码,这是我尝试制作一个包含存储的 HTTP header 字段的字符串:

typedef struct _header {
char* name;
char* value;
} header;

const header headers[] = {
{ "Content-Type", "text/html" },
{ "Server", "testServer" }
};

int headerStringSize = sizeof(char) * 1024 + 1;
char* headerString = malloc(headerStringSize);
int i, headersLength = sizeof(headers) / sizeof(headers[0]);
for (i = 0; i < headersLength; ++i) {
header h = headers[i];
snprintf(headerString, headerStringSize, "%s: %s\r\n", h.name, h.value);
}

但是,它不起作用,因为 snprintf 只是在每次迭代时覆盖 headerString 的内容,而不是追加到正确的字符索引处。我习惯了比C更高级的语言,所以我的问题完全是我自己的无知。因此,如果有人能向我展示实现我想要的目标的最佳方法,我将不胜感激。

最佳答案

你应该初始化你的字符串:

headerString[0]=0;

在循环之前。

现在您可以计算字符串的结尾,并为 snprintf 提供一个指向字符串结尾的指针:

snprintf(headerString + strlen(headerString), headerStringSize - strlen(headerString), "%s: %s\r\n", h.name, h.value);

另请注意已更改的最大长度参数。您还应该检查 malloc 的返回值。

关于c - 如何使用 snprintf 或类似函数 (C) 在 for 循环中连接字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com