如何使用 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 值的检查
我有以下代码,这是我尝试创建一个包含存储的 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
.