函数原型 void copy_n( char dst[], char src[], int n)
实现如下: 将一个字符串从数组src复制到dst,复制n个字符。
1:若src字符串小于n,则在dst的字符串尾部补足足够的nul字符。
2:src的长度大于或等于n,在dst中存储n个字符即可,此时dst将不以nul字节结尾。
自己写的:设置一个标志位,遇到空字符时,标志位置一,往dst数组中写0.
void copy_n( char dst[], char src[], int n)
{
int i,state=1;
for(i=0;i<n;i++)
{
if( (src[i] != '\0') && state ) //此处0 和 '\0'都是可以的
dst[i]= src[i];
else //状态位置一,表示直接补nul即可
{
state=0;
dst[i]='\0';
}
}
}
下面的为参考答案: //两个数组用不同的变量 i,j 查找元素。
void copy_n( char dst[], char src[], int n)
{
int i,j=0;
for(i=0;i<n;i++)
{
dst[i]= src[j];
if(src[j] != 0)
j++;
}
}
注意 printf 的特性, scanf 特性,以及字符串输入输出处理办法!
scanf输入字符串 遇到空格等就会停止输入。所以最好用gets() 函数: gets(src); 来输入字符串
同样printf输出字符串的方式printf("%s\n",src); src为存储字符串的数组名,
假如dst数组只从src中复制10个字符。若src长度大于10个字符,则直接用printf输出src会出错。因为在printf函数中以字符串格式输出,必须等到出现’\0’才会结束。dst数组中没有’\0’。
字符串常量的误区:自己用gets函数向数组中输入字符串常量 “dwe” 时候,直接在输入框输入" dwe",实际上直接输入dwe即可。
char temp[100];
gets(temp);
for(i=0;i<10;i++)
{
printf("%d\n",temp[i]);
}
用上述for循环可以看到,输入字符串”dwe” ,在数组的里存储占了6个单位
34 100 119 101 34 0
其中 34 对应的ascii码为“
100 对应的ascii码为 d
0 对应的ascii码为 nul
而要输入字符串常量”dwe”,应当是输入dwe 。如下图可见。