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;
}
執行結果


沒有留言:
發佈留言