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

How to concat strings in for loop with snprintf or similar function (C)?

我有以下代码,这是我尝试创建一个包含存储的 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 的内容,而不是追加到正确的字符索引处。我习惯 higher-level 语言而不是 C,所以我的问题完全归咎于我自己的无知。因此,如果有人能向我展示实现我想要的目标的最佳方法,我将不胜感激。

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

headerString[0]=0;

在循环之前。

现在你可以计算字符串的结尾并给snprintf一个指向字符串结尾的指针:

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

另请注意已更改的最大长度参数。您还应该添加对 malloc.

的 return 值的检查