sprintf的一个注意点

若有一个字符数组,若要在前面插入一个字符。之前出现一个错误的用法:

#include "stdio.h"
void main()
{/*在buf前面插入字符1*/
	int dest;	char buf[12]="223";		
	sprintf(buf,"1%s",buf);
	printf("buf=%s\n",buf);    
}

sprintf的一个注意点_第1张图片

长度是增加了一,但都变成了前面的字符1了。

这个错误的根源是sprintf中的物理地址发生了重迭,这里是完全重迭。发生重迭的数组处理时,大多数会无法正常工作。例如,如果目标数组的头与源数组的尾在物理地址上重迭,那么源数组中的一部分内容就会在复制之前被覆盖。甚至可能出现使得标识字符串结束的空字符丢失,而使拷贝无休止地无意义地进行着。

这里在先把1写入到buf,中,从而改变原始数组的buf.从而原始数据的第1个字符变成了1.而原始的第一字符把它写到目标字符的第二个字符,就使第二个字符也变成了1。从而双把第二个1,写到目标字符的第三个字符,又为1....如此一直重复,重复次数为原始buf的长度。并在最后加上一个NULL.

从而需要采用临时变量的方式

void main()
{/*在buf前面插入字符1*/
	int dest;	char buf[12]="223";	
	char temp[12];
	printf("by csdn:lin20073\n");	
	sprintf(temp,"1%s",buf);
	strncpy(buf,temp,strlen(temp)+1);
	printf("buf=%s\n",buf);    
}
sprintf的一个注意点_第2张图片

载请标明出处:http://blog.csdn.net/lin200753/article/details/28733225

你可能感兴趣的:(编程细节)