編寫strcpy(s,t,n)函數 ,將t中最多前n個字符復制到s中


#include <stdio.h>
void strcpy(char *s,char *t,int n);
main()
{
     char t[]="hello";
     char s[]="";
     strcpy(s,t,2);
     printf("result:%s",s); 
     system("pause");
}

void strcpy(char *s,char *t,int n)
{  
   int count;
   count =0;
   while((*s++ =*t++)&&(count <n)) 
       count++;
}
執行的結果是:hello  為什么呢 count 的限制不起作用 怎么把t中元素都復制到s中了,哪里出了問題 ,請大家幫助解答一下

8 个解决方案

#1


循環完了才加,當然不行了

#2


不是都復制了,只是復制了3個字符而已while((*s++ =*t++)&&(count <n)) 
這里循環了2遍,第三遍又執行了一次*s++ =*t++,但count <n條件不滿足退出了

#3


復制完加個0封口

#4


樓主能把函數名寫得和標准庫函數不一樣嗎?
#include <stdio.h>
void mystrcpy(char *s,char *t,int n);

char t[]="hello";
char s[6];
main()
{

    mystrcpy(s,t,2);
    printf("result:%s",s);
    system("pause");
}

void mystrcpy(char *s,char *t,int n)
{
    int count;
    count =0;
    while ((*s++ =*t++)&&(count <n))
        count++;
}

#5


問題找到了,char s[]="";數組沒設置大小,但是我不是很理解,為什么不設置大小,t中字符全復制去了呢

#6


兩個問題:
1. char s[]="";
   這個句子只給s數組分配一個字節的空間,所以數組越界是肯定的,結果是不可預期的。
2. strcpy沒有在復制完后加結束符,當是count >= n造成循環退出的,s字串是不帶結束符時,不宜使用printf輸出結果。


#include <stdio.h>
void strcpy(char *s,char *t,int n);
int main()
{
  char t[]="hello";
  char s[10]={0};
  strcpy(s,t,2);
  printf("result:%s\n",s);
  system("pause");
}

void strcpy(char *s,char *t,int n)
{   
  int count;
  count =0;
  while((*s++ =*t++)&&(count <n))  
  count++;
  *s = '\0';
}



#7


引用 5 樓 newlangwen1 的回復:
問題找到了,char s[]="";數組沒設置大小,但是我不是很理解,為什么不設置大小,t中字符全復制去了呢

你確定結果是“hello”,不是“helllo”?

#8


引用 7 樓 cmarquis 的回復:
你確定結果是“hello”,不是“helllo”?

++++++

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com