C和指针4.4

来源:互联网 发布:啊哈算法 pdf 完整版 编辑:程序博客网 时间:2024/06/04 00:48

编写函数,它的原型如下: void copy_n(char dst[],char src[],int n); 这个函数用于把一个字符串从数组src复制到数组dst,但是有如下要求:必需正好复制n个字符到dst数组中,不能多,不能少。如果src字符串的长度小于n,你必需在复制后的字符串尾部补充足够的nul字符,使他的长度正好是n。如果src的长度长于或等于n,那么你在dst中存储n个字符后便可停止。此时,数组dst将不是以nul字符结尾。注意调用copy_n时,它应该在dst[0]至dst[n-1]的空间中存储一些东西,但也只局限那些位置,这与src的长度无关。

我是这样编写的:

#include <iostream>
#include <string>
using namespace std;
void main ()
{  void copy_n(char dst[],char src[],int n) ;
char a[100];
char  b[100]="yanghailin";    //注意只能在定义的时候直接赋值,否则错误


//strncpy(a,b,4);
copy_n(a,b,4);
cout<<a<<endl;

}

void copy_n(char dst[],char src[],int n)   //问题:如何获取src长度
{
int len=strlen(src);
int i;
if (len>=n)
{
for (i=0;i<n;i++)
    dst[i]=src[i];
 
 dst[i]='\0';
   }
else
          {
for ( i=0;i<len;i++)
dst[i]=src[i];
     dst[i]='\0';
     }
}

题目中的要求不是太明白,我这个应该和strncpy实现的功能差不多。但是书上给出的代码如下:只有函数部分

#include <iostream>
#include <string>
using namespace std;
void main ()
{  void copy_n(char dst[],char src[],int n) ;
 void copy_n1(char dst[],char src[],int n) ;
char a[100];
char  b[100]="yanghailin";    //注意只能在定义的时候直接赋值,否则错误
//strncpy(a,b,4);
copy_n1(a,b,20);
cout<<a<<endl;
}

void copy_n(char dst[],char src[],int n)   //问题:如何获取src长度
{
int len=strlen(src);
int i;
if (len>=n)
{
for (i=0;i<n;i++)
    dst[i]=src[i];
 
 dst[i]='\0';
   }
else


{
for ( i=0;i<len;i++)
dst[i]=src[i];
     dst[i]='\0';
}
}


void copy_n1(char dst[],char src[],int n)
{
int dst_index,src_dex;
src_dex=0;
for (dst_index=0;dst_index<n;dst_index+=1)
{
dst[dst_index]=src[src_dex];
if(src[src_dex]!='\0')
src_dex+=1;
}
}

我调试了下:发现在n比src的长度大时出来结果是准确的,但是n比src长度小时,因为没有nul结束标志,前n个字符正确的,后面是乱码  “烫~~~”

0 0
原创粉丝点击