字符串拷贝:
int snprintf(char restrict buf, size_t n, const char restrict format, …);
函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。
https://blog.csdn.net/crfoxzl/article/details/2062139
格式化数据
sscanf()的用法:
int sscanf(const char *buffer,const char *format,[argument ]…);
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里
http://blog.csdn.net/vitalia/article/details/52474761
strncmp与memcmp:
int strcmp(char str1,char str2,int n)
int memcmp(const void *buf1, const void *buf2, unsigned int count);
比较内存区域buf1和buf2的前count个字节。
所需头文件string.h或memory.h
返回值
当buf1< buf2时,返回值<0
当buf1==buf2时,返回值=0
当buf1>buf2时,返回值>0
区别:
对于memcmp(),如果两个字符串相同而且count大于字符串长度的话,memcmp不会在\0处停下来,会继续比较\0后面的内存单元,直到_res不为零或者达到count次数。
对于strncmp(),由于((__res = *cs - *ct++) != 0 || !*cs++)的存在,比较必定会在最短的字符串的末尾停下来,即使count还未为零。具体的例子:
char a1[]=”ABCD”;
char a2[]=”ABCD”;
对于memcmp(a1,a2,10),memcmp在两个字符串的\0之后继续比较
对于strncmp(a1,a2,10),strncmp在两个字符串的末尾停下,不再继续比较。
所以,如果想使用memcmp比较字符串,要保证count不能超过最短字符串的长度,否则结果有可能是错误的。