linux编程sprintf函数实现两句并一句
看下面代码,
sprintf(buf,"Content-Type:%s\r\n",type);
send(cfd,buf,strlen(buf),0);
sprintf(buf,"Content-Length:%ld\r\n",len);
send(cfd,buf,strlen(buf),0);
显然,发送两次是有浪费网络资源,那如何把两句并作一句呢?
sprintf第一个参数要传一个地址,第一次放的时候是放到它的起始位置,buf首地址的位置
如果不想再放数据进入buf时把前面的数据覆盖掉,这时要加一个长度,相当于放在后面
所以
sprintf(buf,"Content-Type:%s\r\n",type);
sprintf(buf+strlen(buf),"Content-Length:%ld\r\n",len);
send(cfd,buf,strlen(buf),0);
c语言太过于灵活,不相关的两个数据类型也可以相关(其实,是指针地址偏移),所以在理解上有些困难。
思考,strlen使用时为什么不用加1如strlen(name)+1
。
#include <stdio.h>
#include <string.h>
int main(void) {
char foo[32] = "hello";
printf("sizeof foo: %zu\n", sizeof foo);
printf("strlen(foo): %zu\n", strlen(foo));
return 0;
}
运行
sizeof foo: 32
strlen(foo): 5
stackoverflow上也有解答.