C关于字符串赋值的一些方法比较
#include<stdio.h>
#include <string.h>
int main()
{
char fmt[16];
strncpy(fmt, "aaaabbbbccccddddeeee", sizeof(fmt));
printf("strncpy: %s\n",fmt);
strcpy(fmt, "aaaabbbbccccddddeeee");
printf("strcpy: %s\n",fmt);
sprintf(fmt, "%s", "aaaabbbbccccddddeeee");
printf("sprintf: %s\n",fmt);
snprintf(fmt, sizeof(fmt), "%s", "aaaabbbbccccddddeeee");
printf("snprintf:%s\n",fmt);
sscanf("aaaabbbbccccddddeeee", "%s", &fmt);
printf("sscanf: %s\n",fmt);
return 0;
}
可以看出对于字符串赋值将
strcpy strncpy snprintf sscanf sprintf
等几个函数的执行结果进行了比较分析。
执行结果如下:
![](https://images2017.cnblogs.com/blog/1227642/201708/1227642-20170828112659296-1675738757.png)
可以看到,对于指定长度的字符串赋值来说,snprintf方法可以自动拼接一个'\0'
而strncpy虽然是带了长度参数的,但是不会自动拼接'\0'
strcpy sprintf sscanf功能函数并不会将其截断,当超出了容器范围的时候会向后覆盖写数据。