linux编程sprintf函数实现两句并一句

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上也有解答.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值