日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中strcpy()函數的具體實現及注意事項_C 語言

作者:Candysrf ? 更新時間: 2022-12-27 編程語言

一、strcpy()函數的簡介

?strcpy()函數:是將一個字符串復制到另一塊空間地址中 的函數,‘\0’是停止拷貝的終止條件,同時也會將 '\0' 也復制到目標空間。下面是庫中的strcpy()函數聲明:

char* strcpy(char* destination,const char* source);

1. 函數的參數:

  • char* destination---------目標字符串的首地址
  • const char* source------源地址:被復制的字符串的首地址,用const修飾,避免修改掉被拷貝的字符串

2.函數的返回值類型:

  • char*:返回的是目標字符串的首地址?

二、strcpy()函數的具體使用

場景一:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
int main()
{
	char arr[10] = "########";
	printf("%s\n", strcpy(arr,"hello"));
 
	return 0;
}

?輸出的結果

場景二:?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
int main()
{
	char arr1[10] = "**********";
	char arr2[10] = "abcd";
	printf("%s\n", strcpy(arr1, arr2));
	return 0;
}

輸出結果

三、使用strcpy()函數的注意事項

1.源字符必須以 '\0'結束:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
int main()
{
	char arr1[10] = "**********";
	char arr2[] = { 'a','b','c','d' };
	printf("%s\n", strcpy(arr1,arr2));
 
	return 0;
}

這里的代碼會出錯,'\0'是停止拷貝的終止條件,arr2字符數組所在的內存空間后面存儲的內容并不知道,不遇到 '\0' 拷貝就不會停止,這就會導致越界訪問,程序就會出現問題。

2.目標空間必須足夠大,以確保能放源字符串

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
int main()
{
	char arr1[5] = "*****";
	char arr2[] = "hello world";
	printf("%s\n", strcpy(arr1,arr2));
 
	return 0;
}

?這里雖然拷貝成功并將結果輸出了,但程序卻崩潰了。目標空間太小,不足以放置拷貝的源字符串,會造成溢出的情況

3.目標空間必須可變

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
int main()
{
	char* str1 = "hello world";
	char str2[10] = "*********";
	printf("%s\n", strcpy(str1,str2));
 
	return 0;
}

這里的程序也出現了錯誤。str1指向的是常量字符串,是不可以被修改掉的,目標空間必須是可以被修改的,因為要將拷貝的字符串放在目標空間中。而源字符串可以是能夠修改的、也可以是不能修改的,因為strcpy函數的第二個參數已經用const關鍵字修飾了,保證了拷貝過程中不會被修改。

補充:strcpy()的其它屬性

strcpy()的返回類型是char *,該函數返回的是一個字符的地址。

第一個參數不必指向數組的開始,這個特性可用于拷貝數組的一部分。

下面這個程序演示了將一個字符串拷貝到另一個字符數組的指定位置:

/*
 * @Author: Your name
 * @Date:   2020-02-24 14:35:13
 * @Last Modified by:   Your name
 * @Last Modified time: 2020-02-24 15:26:57
 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define WORDS "beast"
#define SIZE 40
int main()
{
    const char * orig = WORDS;
    char copy[SIZE] = "Be the best that you can be.";
    char * ps;
    puts(orig);
    puts(copy);
    ps = strcpy(copy+7,orig);//ps==&copy[7],第八個元素的地址。
    puts(copy);
    puts(ps);
    getchar();
    return 0;
}

下面是該程序的輸出:

beast
Be the best that you can be.
Be the beast
beast

注意:

  • strcpy()把源字符的空字符也拷貝進去
  • 所以空字符覆蓋了copy數組中that的第一個t
  • 由于第一個參數是copy+7,所以ps指向copy中的第8個元素,因此puts(ps)從該處開始打印

具體如下:

總結

原文鏈接:https://blog.csdn.net/weixin_47970952/article/details/126163736

欄目分類
最近更新