2022年7月3日星期日

C strcpy

char *strcpy(char * __restrict__string1, const char * __restrict__string2);

功能:複製字串2到字串1中
注意:字串結尾需含結束字元

以下會以三種情境,會有範例程式碼及執行結果
  • string2長度與string1相同
  • string2長度大於string1(要特別注意)
  • string2長度小於string1


string2長度與string1相同

程式碼

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char string1[] = "string1";
  5. char string2[] = "string2";
  6. int main(void)
  7. {
  8. int result = 0;
  9.  
  10. printf("Before strcpy\n");
  11. printf("string1:%s\n",string1);
  12. printf("string2:%s\n\n",string2);
  13.  
  14. strcpy(string1,string2);
  15.  
  16. printf("After strcpy\n");
  17. printf("string1:%s\n",string1);
  18. printf("string2:%s\n",string2);
  19.  
  20. return 0;
  21. }

執行結果



string2長度大於string1

程式碼

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char string1[] = "string1";
  5. char string2[] = "hello world";
  6. int main(void)
  7. {
  8. int result = 0;
  9.  
  10. printf("Before strcpy\n");
  11. printf("string1:%s\n",string1);
  12. printf("string2:%s\n\n",string2);
  13.  
  14. strcpy(string1,string2);
  15.  
  16. printf("After strcpy\n");
  17. printf("string1:%s\n",string1);
  18. printf("string2:%s\n",string2);
  19.  
  20. return 0;
  21. }

執行結果

此處會發現string2印出來的結果異常。由於在編譯期間string1的大小其實已經被配置了8個bytes含'\0',而string配置了12個bytes含'\0',執行strcpy後string2被覆蓋的緣故。



string2長度小於string1

程式碼

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char string1[] = "string1";
  5. char string2[] = "hello";
  6. int main(void)
  7. {
  8. int result = 0;
  9.  
  10. printf("Before strcpy\n");
  11. printf("string1:%s\n",string1);
  12. printf("string2:%s\n\n",string2);
  13.  
  14. strcpy(string1,string2);
  15.  
  16. printf("After strcpy\n");
  17. printf("string1:%s\n",string1);
  18. printf("string2:%s\n",string2);
  19.  
  20. return 0;
  21. }

執行結果



參考資料


沒有留言:

發佈留言

打賞按讚