#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