sprintf、snprintf、strcpy、strncpy
2017-05-25 13:25
260 查看
例一:
#include <stdio.h>
int main()
{
char first[20]="Hello, world!";
printf("%s\n", first);
sprintf(first, "%c%04d", 'r', 1 );
printf("%s\n", first);
printf("%s\n", first+6);
return 0;
}输出结果:
分析:
在向first字符串中拷贝数据时,除了“r0001”外,还拷贝了字符串结束标志0,替换了原来字符串里面的逗号。
例二:
#include <stdio.h>
int main()
{
char first[20]="Hello, world!";
printf("%s\n", first);
snprintf(first, 5, "%c%04d", 'r', 1);
printf("%s\n", first);
printf("%s\n", first+5);
return 0;
}输出结果:
分析:
给出数字5,希望只拷贝“r0001”这5个字符,不拷贝字符串结束标志,实际确实只拷贝了5个字符,是“r000”+字符串结束标志0。把0作为指定数量字符串中的最后一个。
例三:
#include <stdio.h>
#include <string.h>
int main()
{
char first[20]="Hello, world!";
char second[]="hniois";
printf("%s\n", first);
strcpy(first, second);
printf("%s\n", first);
printf("%s\n", first+7);
return 0;
}输出:
分析:
strcpy不仅拷贝了“hniois”到first字符串中,还额外多拷贝了一个字符串结束标志符0,导致覆盖了原来的空格。
例四:
#include <stdio.h>
#include <string.h>
int main()
{
char first[20]="Hello, world!";
char second[]="hniois";
printf("%s\n", first);
strncpy(first, second, 5);
printf("%s\n", first);
//printf("%s\n", first+7);
return 0;
}输出:
分析:
strncpy在给出拷贝的字符串个数5后,只拷贝前5个字符串,而且局对不会自动添加一个0进去。
#include <stdio.h>
int main()
{
char first[20]="Hello, world!";
printf("%s\n", first);
sprintf(first, "%c%04d", 'r', 1 );
printf("%s\n", first);
printf("%s\n", first+6);
return 0;
}输出结果:
分析:
在向first字符串中拷贝数据时,除了“r0001”外,还拷贝了字符串结束标志0,替换了原来字符串里面的逗号。
例二:
#include <stdio.h>
int main()
{
char first[20]="Hello, world!";
printf("%s\n", first);
snprintf(first, 5, "%c%04d", 'r', 1);
printf("%s\n", first);
printf("%s\n", first+5);
return 0;
}输出结果:
分析:
给出数字5,希望只拷贝“r0001”这5个字符,不拷贝字符串结束标志,实际确实只拷贝了5个字符,是“r000”+字符串结束标志0。把0作为指定数量字符串中的最后一个。
例三:
#include <stdio.h>
#include <string.h>
int main()
{
char first[20]="Hello, world!";
char second[]="hniois";
printf("%s\n", first);
strcpy(first, second);
printf("%s\n", first);
printf("%s\n", first+7);
return 0;
}输出:
分析:
strcpy不仅拷贝了“hniois”到first字符串中,还额外多拷贝了一个字符串结束标志符0,导致覆盖了原来的空格。
例四:
#include <stdio.h>
#include <string.h>
int main()
{
char first[20]="Hello, world!";
char second[]="hniois";
printf("%s\n", first);
strncpy(first, second, 5);
printf("%s\n", first);
//printf("%s\n", first+7);
return 0;
}输出:
分析:
strncpy在给出拷贝的字符串个数5后,只拷贝前5个字符串,而且局对不会自动添加一个0进去。
相关文章推荐
- strcpy/strncpy/sprintf/_snprintf/snprintf的区别
- strcpy, strncpy, strcat, strncat, sprintf, snprintf等常用函数
- 尽量使用strncpy,snprintf,少用strcpy,sprintf
- linux中strcpy strncpy memcpy sprintf snprintf区别总结
- 具有自动截断功能的函数:对比:strcpy、strncpy、sprintf、snprintf在写入的数据大于缓冲区的情况下如何处理
- C里安全的字符串拷贝 strncpy strcpy sprintf snprintf
- snprintf比sprintf好,那么strncpy就比strcpy好?!
- strcpy ,strncpy ,strlcpy和snprintf的使用
- 字符串 函数sprintf、strcpy 、strncpy及 memcpy , strftime,strcat
- strcpy、 strncpy 和snprintf
- strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、区别和效率
- sprintf snprintf strcpy memcpy 区别及应用
- strcpy、strncpy、strncpy_s和snprintf
- 字符串拷贝函数strcpy, strcat, sprintf, strncpy, strncat和snprintf的区别
- strcat,strncat,strcpy,strncpy,snprintf,vsnprintf
- strcpy,memcpy,memmove,memset,strncpy
- sprintf与snprintf
- memcpy、strcpy、snprintf的区别
- sprintf()的snprintf()用法
- strncpy()、 strcpy()、 strcmp 、strdup、 strlen函数的实现