1.strcpy()与sprintf()
strcpy()是简单的拷贝
sprintf()是带格式的拷贝
char arr[256];
memset(arr,0,sizeof(arr));
strcpy(arr,"hello world!");
sprintf(arr,"the value of arr is %s","hello world!");
2.printf(),sprintf(),fprintf()
都是把格式好的字符串输出,只是输出的目标不一样: 1 printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。 2 sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。 3 fprintf, 是把格式字符串输出到指定文件中,所以参数笔printf多一个文件指针FILE*。
引用自:http://zhidao.baidu.com/question/577226016.html
3.sprintf(),memcpy()
如果是读取二进制文件中的数据,然后再存储到另一个新的文件中,如果是使用sprintf(),可能会将文件中的0当做\0而不再进行写入操作,此时使用memcpy()可以解决这种问题,因为它提供了一个count个数来控制复制的字符个数而不至于提前终止拷贝操作。
fp=fopen("a.txt","rb");
if(fp==NULL)
{
return 0;
}
buf=new char[BUFFERSIZE+1];
memset(buf,0,BUFFERSIZE+1);
int readcount=0;
while(!feof(fp))
{
readcount=fread(buf,1,BUFFERSIZE,fp);
if(readcount>0)
{
*(buf+readcount)='\0';
//法1:
//sprintf(m_sendbuff,"%s%s",encode(buf,ENCODE,readcount),"\r\n");
//sprintf(m_sendbuff,"%s%s",buf,"\r\n");//error,如果二进制数据中有0,有可能提前终止。。。
//发2:
memcpy(m_sendbuff,buf,readcount);//ok
if(senddata()==0)
{
//MessageBox(NULL,_T("附件发送0 ERROR!"),_T("sendmail() Error!"),MB_OK);
return 0;
}
memset(buf,0,BUFFERSIZE+1);
}
}
sprintf(m_sendbuff,"%s","\r\n");
if(senddata()==0)
{
//MessageBox(NULL,_T("附件发送1 ERROR!"),_T("sendmail() Error!"),MB_OK);
return 0;
}
delete[] buf;
fclose(fp);
}
}
4.StringCchPrintf()
StringCchPrintf()是sprintf的一个替代品。它接受一个格式字符串和参数列表和返回一个格式化字符串。提供检查功能,确保不越界访问。
5.strcpy(),strcpy_s()
strcpy_s 函式是 strcpy 的安全版本,属于 ISO/IEC TR 24731 的标准,某些 C 函式库支援这个函式,包含 Microsoft C Runtime Library(微软 C 语言执行时期函式库)。它与 strcpy 的不同在于,在它取得额外参数来决定目的缓冲区大小时,会因为发生溢位而出现错误,如此一来,就可以预防缓冲区溢位。由于 strcpy_s 对于 C 语言来说是新的函式,所以没有特别受到广泛支援。 例如, 我们有个数组: unsigned char buf[2]; 当我们使用strcpy(buf, "1234567")时, 以buf为起点的*(buf+3)也就是buf[3]被写入值, 但是, 此时也许这个buf+3这个位置被其它的程序或变量使用时, 则会改变其它变量的值. 而strcpy_s(buf,2,"1234567")则告诉程序它只有两个字节, 此时, 程序不会将数据写入到 buf+3的地址中, 所以它更安全.
memset(m_user,0,sizeof(m_user));
strcpy_s(m_user,"aaa");//vc++中无警告
strcpy(m_ user,"ccc");
参考:http://zhidao.baidu.com/question/420256391.html
注:strcpy_s()有两个重载版本:
strcpy_s(char(&_Dest)[_Size],const char* _source);
strcpy_s(char* _dst,rsize_t sizeInBytes,const char* _src);
当然还有类似:strcat_s(),printf_s()