前人挖坑,后人种树。
不能对同一段内存(同一个buf) 或是两个重叠的内存使用snprintf,换句等方面说,在使用snprintf 时,就确保内存不重叠。
先来看看一段问题代码的执行结果。 代码是前人所作,从工程Copy出来后稍做修改,用途是对输入字符串进行排序,输入为0~7的任意组合。
#include <stdio.h>
#include <string.h>
void main()
{
char week[32] = "0,1,2,6,5";
char new_week[32] = {0};
int i = 0;
char *weekday[] ={"0","1","2","3","4","5","6","7"};
int n = 0;
for(i = 0; i < 8; i++)
{
if(strstr(week, weekday[i]))
{
snprintf(new_week,sizeof(new_week),"%s%s,", new_week, weekday[i]);
n += 2;
}
}
if (new_week[n - 1] == ',')
new_week[n - 1] = 0;
printf("week: %s\t; new_week: %s\n", week, new_week);
}