printf函数是众所周知的,但是printf通常打印在标准输出上,在需要组织字符串和设置格式时sprintf很有用。
例如,在处理传感器数据时,可以将所获得的数据组合为特定格式并将其经由网络发送。
char buffer[100]={ 0 }; sprintf(buffer,' temperature: %f; humidity:%frn ',tempData,humiData; send(clientsocket,buffer,strlen ) ) buffer ); 此外,例如,在进行HTTP协议包封装的情况下,
char dataBuf[1024]={ 0 }; sprintf(databuf,' HTTP/1.1 200 SUCCESSrn ' ); send (客户端套接字,dataBuf,strlen(databuf ),0 ); sprintf(databuf,' Content-type:text/htmlrn ' ); send (客户端套接字,dataBuf,strlen(databuf ),0 ); sprintf(databuf,'rn ' ); send (客户端套接字,dataBuf,strlen(databuf ),0 ); do{fgets(databuf,1024,fs ); send (客户端套接字,dataBuf,strlen(databuf ),0 ); } while (! EOF(fs ); flose(fs ); sprintf语法:
intsprintf(char*string,char *format [,argument, ] );
string:是指向存储c字符串的字符数组的指针。 以format:格式设置的字符串argument:根据语法格式替换format的%标记语法相当简单,但需要注意的是。 sprintf从string[0]的位置开始按顺序输入format指向的字符串。 如果format所指字符串的长度大于字符串字符数组
char sendBuf[1024]={ 0 }; sprintf(sendbuf,' HTTP/1.1 404 NOT FOUNDrn ' ); send (客户端套接字,sendBuf,strlen(sendbuf ),0 ); 打印(thesentstring1is : % srn )、sendBuf ); sprintf(sendbuf,' Content-type:text/htmlrn ' ); send (客户端套接字,sendBuf,strlen(sendbuf ),0 ); printf (thesentstring2is : % srn ),sendBuf ); sprintf(sendbuf,'rn ' ); send (客户端套接字,sendBuf,strlen(sendbuf ),0 ); printf (thesentstring 3is : % srn ),sendBuf ); printf (the other char0is : % crn ),sendBuf[0]; printf (the other char1is : % crn ),sendBuf[1]; printf (the other char2is : % crn ',sendBuf[2] ); printf (the other char 3is : % crn ',sendBuf[3] ); printf (the other char4is : % crn ',sendBuf[4] ); printf (the other char5is : % crn ',sendBuf[5] ); printf (the other char6is : % crn ',sendBuf[6] ); 输出如下。
如上面的代码所示,最后使用sprintf将sendBuf字符串数组格式化为“rn”,然后每次打印一个sendBuf。
sendBuf[0]的值为r,因此不显示此打印
sendBuf[1]的值为n,因此无法看到此打印,但发生了换行行为
sendBuf[2]的值为“”,是字符串的最后一个“ ”,因此打印不可见
sendBuf[3]的值为t,这是最后一次格式化时保留的字符
sendBuf[4]的值为e,这是最后一种格式中剩下的字符
sendBuf[5]的值为n,这是最后一种格式中剩下的字符
sendBuf[6]的值为t,这是最后一次格式化时保留的字符
在上面的代码上下文中,sendBuf中最后一个格式化的字符对程序的执行没有任何影响。 使用send发送字符串时,发送器指定为strlen(sendBuf ),因此只有刚复制的新数据才会发送到sendbuf字符数组。 但是,如果将strlen更换为sizeof,程序功能将发生异常。
在使用sprintf之前,可能需要确保目标字符串数组是“干净的”,可以使用memset实现。
如memset(sendbuf,0,sizeof ) char ) * 1024 )。