2022年7月3日星期日

C strcpy

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

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

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


string2長度與string1相同

程式碼

#include <stdio.h>
#include <string.h>

char string1[] = "string1";
char string2[] = "string2";
int main(void)
{
  int result = 0;

  printf("Before strcpy\n");
  printf("string1:%s\n",string1);
  printf("string2:%s\n\n",string2);

  strcpy(string1,string2);

  printf("After strcpy\n");
  printf("string1:%s\n",string1);
  printf("string2:%s\n",string2);

  return 0;
}

執行結果



string2長度大於string1

程式碼

#include <stdio.h>
#include <string.h>

char string1[] = "string1";
char string2[] = "hello world";
int main(void)
{
  int result = 0;

  printf("Before strcpy\n");
  printf("string1:%s\n",string1);
  printf("string2:%s\n\n",string2);

  strcpy(string1,string2);

  printf("After strcpy\n");
  printf("string1:%s\n",string1);
  printf("string2:%s\n",string2);

  return 0;
}

執行結果

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



string2長度小於string1

程式碼

#include <stdio.h>
#include <string.h>

char string1[] = "string1";
char string2[] = "hello";
int main(void)
{
  int result = 0;

  printf("Before strcpy\n");
  printf("string1:%s\n",string1);
  printf("string2:%s\n\n",string2);

  strcpy(string1,string2);

  printf("After strcpy\n");
  printf("string1:%s\n",string1);
  printf("string2:%s\n",string2);

  return 0;
}

執行結果



參考資料


沒有留言:

發佈留言

打賞按讚