【工具】snprintf和sprintf(buf,"%.3s",功能一样 在就已经不用memcpy+MIN了

2023-05-16

#include <stdio.h>
#include <string.h>
/*
int snprintf(char *str, size_t size, const char *format, ...);
最多从源字符串format中拷贝size字节的内容(含字符串结尾标志'\0')到目标字符串
成功返回源串的长度(strlen, 不含'\0')
失败返回负值
*/
int main(int argc,char **argv)
{
	char buf[16],i;
	memset(buf,'F',16);
	for(i=0;i<16;i++)printf("%c-",buf[i]);printf("\r\n");//F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-

	sprintf(buf,"%.3s","123456");/*结尾一起给你*/
	for(i=0;i<16;i++)printf("%d-",buf[i]);printf("\r\n");//49-50-51-0-70-70-70-70-70-70-70-70-70-70-70-70-

	memset(buf,'F',16);	
	sprintf(buf,"%.*s",4,"123456");
	for(i=0;i<16;i++)printf("%d-",buf[i]);printf("\r\n");//49-50-51-52-0-70-70-70-70-70-70-70-70-70-70-70-

	memset(buf,'F',16);	
	sprintf(buf,"%.*s",40,"123456");/*安全的 你要40个 只给你7个*/
	for(i=0;i<16;i++)printf("%d-",buf[i]);printf("\r\n");//49-50-51-52-53-54-0-70-70-70-70-70-70-70-70-70-

	memset(buf,'F',16);	
	snprintf(buf,40,"%s","123456");/*安全的 你要40个 只给你7个*/
	for(i=0;i<16;i++)printf("%d-",buf[i]);printf("\r\n");//49-50-51-52-53-54-0-70-70-70-70-70-70-70-70-70-
	return 0;
}

问题说道点子上

比如你做一个数组softvar[5]={0}

它是V100+最后一个\0  一定要5个内存 否则IAR死机

你需要的是sprintf(buf,"%.4s"...)这样 只要过来4个 最后自动跟一个0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【工具】snprintf和sprintf(buf,"%.3s",功能一样 在就已经不用memcpy+MIN了 的相关文章

随机推荐