例一:
#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进去。