程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 透過strcpy()看問題

透過strcpy()看問題

編輯:C++入門知識

小明最近寫程序發現經常會出現一些莫名其妙的錯誤, 就過來問大明,說程序總是出現問題的,而且莫名其妙的就掛在了strcpy這裡了, 郁悶了挺久的了,於是剛畢業不久的小明還是不太好意思的來問了大明, 大明看了小明的代碼,發現了一些問題,這些問題是平時寫程序不太注意時經常發生的哦, 現在就展開來讓大家一起看看   [cpp]  #include <stdio.h>   /*   * 注意所犯錯誤1   */   void error1()   {       char str0[10];       char *str1 = "0123456789";        strcpy(str0, *str1);   }      /*   *注意所犯錯誤2   */   void error2()   {       char str0[10];       char str1[10];       int i = 0;          for(i=0; i<10; i++)       {           str1[i] = 'a';         }          strcpy(str0, str1);   }      /*   *注意所犯錯誤3   */   void error3(char *str1)   {       char str0[10];       int len = strlen(str1);       if(len <= 10)           strcpy(str0, str1);   }      void main()   {       error1();       error2();       error3("001123456789");/*注意*/      }   下面是對以上所犯錯誤做修正: [cpp]  /*   * 注意所犯錯誤1修正   */   void right1()   {       char str0[11] = {0};       char *str1 = "0123456789";        strcpy(str0, str1);   }      /*   *注意所犯錯誤2修正   */   void right2()   {       char str0[11] = {0};       char str1[11] = {0};       int i = 0;          for(i=0; i<10; i++)       {           str1[i] = 'a';         }          strcpy(str0, str1);   }      /*   *注意所犯錯誤3修正   */   void right3(char *str1)   {       char str0[10] = {0};       int len = strlen(str1);       if(len < 10)           strcpy(str0, str1);   }      void main()   {       right1();       right2();       right3("001123456789");/*注意*/      }     請寫出strcpy()原型設計代碼: 比較常見的犯錯應該像下面代碼了, [cpp]  /*請寫出strcpy()函數原型*/   /*  *注意1  */   void strcpy(char *dest, char *source)   {       while(*source != '\0')            *dest++ = *source++;   }      /*   * 注意2 加上const,防止參數被改變   */   void strcpy(char *dest, const char *source)   {       while(*source != '\0')            *dest++ = *source++;   }      /*   * 好的strcpy應該如下   */   void strcpy(char *dest, const char *source)   {       assert((dest != NULL) && (source != NULL));          const char *temp_src = source;       char *temp_dest = dest;//防止過程中改變dest的地址          while(*temp_src != '\0')            *temp_dest++ = *temp_src++;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved