我想通过看起来像这样的套接字发送消息:“USER anonymous \ r \ n”。
为了创建格式化的字符串而不是常量字符串,我使用了snprintf()。不幸的是,它似乎没有复制换行符\n
,只是复制回车\r
。
#define USERNAME_ANONYMOUS "anonymous"
[...]
// Inside a function.
int sz = snprintf(NULL, 0, "USER %s\r\n", USERNAME_ANONYMOUS);
char* username = NULL;
if ((username = calloc(sz + 1, sizeof(char))) == NULL) {
perror("Could not allocate memory");
return;
}
snprintf(username, sz, "USER %s\r\n", USERNAME_ANONYMOUS);
for (int i = 0; i <= sz; i++) {
printf("%c %d\n", username[i], username[i]);
}
输出:
U 85
S 83
E 69
R 82
32
a 97
n 110
o 111
n 110
y 121
m 109
o 111
u 117
s 115
13
0
0
答案 0 :(得分:3)
答案 1 :(得分:0)
好吧,如果您分配一个大小为sz + 1
的缓冲区,那么将缓冲区大小传递给第二个snprintf
调用,即sz + 1
而不是{{ 1}},这是你传递的数字。
对sz
的第二次调用应为:
snprintf
或者它会用null终结符覆盖最后一个snprintf(username, sz + 1, "USER %s\r\n", USERNAME_ANONYMOUS);
,因为它没有足够的空间容纳你想要打印的整个字符串。