您的位置:首页 > 其它

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进去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: