在一次开发中,需要用到数字转换字符串,总所周知使用sprintf就可以完成。而且网上也有好多关于缓冲区要足够大,否则会出现问题。
MSDN中在Remarks中有这么一句话:If copying occurs between strings that overlap, the behavior is undefined.
那时使用的语句大概如下
int num = 16;
for (int i = 0; i < num; i++)
{
char buf[2];
sprintf(buf, "%d", i);
//do others
printf("\t%s\t%d |", buf, i); //测试使用
}
可以发现如果空间分配不够的话,连i的值都改变了,其中i的值一直在0-9之间循环,导致此处死循环。
在此留个标记,待以后有足够的时间去跟踪一下源码文件。
切记:使用sprintf时一定得分配足够的空间,否则出现的意外不只一点点