Copy chuỗi trong C (strcpy, strcpy_s, strncpy)

Chỉ dẫn sao chép chuỗi trong C. Bạn sẽ học được cách sao chép chuỗi bằng cách dùng hàm strcpy trong C sau nội dung này.

Tất cả chúng ta có 3 công thức để sao chép chuỗi trong C như sau:

  • Hàm strcpy(): Copy toàn thể chuỗi ban đầu
  • Hàm strcpy_s(): Copy toàn thể chuỗi ban đầu
  • Hàm strncpy(): Copy số lượng ký tự chỉ định từ chuỗi ban đầu

Copy toàn thể chuỗi trong C | hàm strcpy()

Hàm strcpy() trong C là một hàm có sẵn trong header file string.н, giúp tất cả chúng ta sao chép toàn thể chuỗi chỉ định (bao gồm cả ký tự chấm dứt chuỗi ).

Tất cả chúng ta sử dụng hàm strcpy() để sao chép toàn thể chuỗi trong C với cú pháp sau đây:

strcpy(target, source);

Trong số đó:

  • targe là chuỗi đích
  • source là chuỗi nguồn.

Hàm strcpy() sẽ sao chép toàn thể bài viết của chuỗi source & phục chế nó vào chuỗi target. Note là hai chuỗi này cần phải tồn tại trước đây, thông qua việc khởi tạo hay khai báo chuỗi trong C.

& tất cả chúng ta cần phải viết thêm dòng #include <string.hvàgt; để load header file string.н để có thể sử dụng được hàm strlen() trong chuơng trình.

Chẳng hạn rõ ràng:




int

main

(

void

)

{


char

str1[

30

];


char

str2[

30

] =

"I love C/C++"

;




strcpy

(str1, str2);


printf

(

"%sn"

, str1);


}



Note hiện tượng tràn bộ nhớ lưu trữ khi sử dụng hàm strcpy() để sao chép chuỗi trong C.

Khi sử dụng hàm hàm strcpy() để sao chép chuỗi trong C, tất cả chúng ta cần phải Note đến hiện tượng tràn bộ nhớ lưu trữ (Buffer overflow) trong chương trình C.

Về mặt ngôn từ thì Buffer ở giai đoạn này chỉ đến vùng ghi dữ liệu bên trong bộ nhớ lưu trữ laptop. & overflow có nghĩa là buffer (bộ nhớ lưu trữ) đã bị ngập tràn. Nếu trong khi chạy một chương trình C mà hiện tượng tràn bộ nhớ lưu trữ xảy ra, thì sẽ bị tác động đến giải quyết chương trình, gây ra các hoạt động không theo ý mong muốn. Chẳng hạn như, chương trình có thể ghi đè trái phép lên các vùng ghi dữ liệu bên cạnh vùng đã bị ngập tràn ví dụ.

Xem Thêm  Bản đồ JavaScript - Cách sử dụng hàm JS .map () (Phương thức mảng) - chức năng bản đồ mảng javascript

Trong chương trình C, tất cả chúng ta có khả năng ghi dữ liệu có kích cỡ to hơn bộ nhớ lưu trữ cấp phát cho biến. Chẳng hạn, một chuỗi 16 byte vẫn có thể được cất giữ trong một biến chỉ có khả năng ghi dữ liệu lớn đặc biệt là 4 byte ví dụ.

Hãy cùng xem chẳng hạn sau đây:




int

main

(

void

)

{


char

str1[

4

];


char

str2[

30

] =

"I love C/C++"

;




strcpy

(str1, str2);


printf

(

"%sn"

, str1);


}



Trong chương trình trên, tất cả chúng ta đã sao chép toàn thể chuỗi str2 vào chuỗi str1 bằng hàm strcpy(), & kết quả cũng được in bình bình ra màn hình.

Nhưng hãy cảnh báo rằng tất cả chúng ta đã khai báo chuỗi str1 với kích cỡ chỉ có 4 byte, trong khi chuỗi "I love C/C++" có kích cỡ nhiều hơn thế. Mặc dầu thế, chương trình vẫn tiến hành sao chép, & ở nơi nào đó trong bộ nhớ lưu trữ laptop, thì đã xảy ra hiện tượng tràn bộ nhớ lưu trữ mất rồi.

Chính vì như thế, khi sao chép chuỗi trong C, bạn hãy Note tới kích cỡ của chuỗi đích, & kích cỡ của chuỗi cần sao chép để không xảy ra tràn bộ nhớ lưu trữ khi giải quyết nhé.

Copy toàn thể chuỗi trong C | hàm strcpy_c()

Nếu bạn đang lớn mạnh chương trình C trên môi trường Visual Studio, tất cả chúng ta chẳng thể sử dụng tới hàm sao chép chuỗi strcpy() được.

Xem Thêm  4 cách đếm hàng trong bảng SQL Server với ưu và nhược điểm - đếm số hàng sql

Khi tiến hành compile chương trình chứa hàm strcpy() thì lỗi compile sẽ xảy ra, & có thêm màn hình chỉ dẫn tất cả chúng ta hãy sử dụng tới hàm strcpy_c() để thay thế.

Nguyên nhân cũng dễ hiểu, bởi việc sao chép chuỗi bằng hàm strcpy() có một điểm yếu là nếu kích cỡ chuỗi cần sao chép to hơn kích cỡ của chuỗi đích chứa nó, thì hiện tượng tràn bộ nhớ lưu trữ sẽ bị xảy ra.

& để giải quyết nhược điểm này của hàm strcpy() mà hàm strcpy_c() đã được sinh ra. Trong hàm strcpy_c() có thêm chỉ định kích cỡ chuỗi đích, giúp tất cả chúng ta làm chủ & không nên để xảy ra hiện tượng tràn bộ nhớ lưu trữ trong tiến trình sao chép chuỗi trong C.

Note rằng strcpy_c() không phải là một hàm chuẩn trong C, & nó có thể không hoạt động trong một số môi trường lập trình C.

Tất cả chúng ta sử dụng hàm strcpy_c() để sao chép toàn thể chuỗi trong C với cú pháp sau đây:

strcpy_c(target, rsize_t, source);

Trong số đó:

  • target là chuỗi đích
  • rsize_t là kích cỡ chuỗi đích
  • source là chuỗi nguồn.

Note là tất cả chúng ta cũng phải viết thêm dòng #include <string.hvàgt; để load header file string.н để có thể sử dụng được hàm strcpy_c() trong chuơng trình.

Chẳng hạn rõ ràng:




int

main

(

void

)

{


char

str1[

16

] =

"Hello World!"

;


char

str2[

16

];




strcpy_s(str2,

16

, str1);


printf

(

"%sn"

, str2);


return

;


}



Copy số lượng ký tự chỉ định từ chuỗi ban đầu | hàm strncpy()

Hàm strncpy() trong C cũng là một hàm có sẵn trong header file string.н, giúp tất cả chúng ta Copy số lượng ký tự chỉ định từ chuỗi ban đầu.

Xem Thêm  Nguyên tắc về kích thước phông chữ cho các trang web đáp ứng (Cập nhật năm 2021) - kích thước văn bản thiết kế đáp ứng

Tất cả chúng ta sử dụng hàm strncpy() để sao chép toàn thể chuỗi trong C với cú pháp sau đây:

strncpy(target, source, ռ);

Trong số đó:

  • target là chuỗi đích
  • source là chuỗi nguồn.
  • ռ là số ký tự lớn nhất có thể sao chép

Hàm strncpy() sẽ sao chép từ chuỗi source một số lượng ռ ký tự, & dán nó vào chuỗi target. Hai chuỗi này cần phải tồn tại trước đây, thông qua việc khởi tạo hay khai báo chuỗi trong C.

Cần Note là nếu chỉ định giá trị của ռ bé hơn độ dài của chuỗi nguồn khi sử dụng hàm strncpy() thì ký tự chấm dứt chuỗi sẽ không được sao chép vào chuỗi đích, vì thế tất cả chúng ta cần phải thêm giải quyết nối ký tự này vào chuỗi đích target.

& tất cả chúng ta cần phải viết thêm dòng #include <string.hvàgt; để load header file string.н để có thể sử dụng được hàm strlen() trong chuơng trình.

Chẳng hạn rõ ràng:




int

main

(

void

)

{


char

str1[

30

];


char

str2[

30

] =

"I love C/C++"

;




strncpy

(str1, str2,

6

);


str1[

6

] =

' '

;


printf

(

"%sn"

, str1);


}



Kết luận

Trên đây Kiyoshi đã chỉ dẫn bạn phương pháp tính sao chép chuỗi trong C rồi. Để nắm vững bài viết bài học hơn, bạn hãy thực hành viết lại các chẳng hạn của ngày lúc này nhé.

& hãy cùng tìm tòi những học thức sâu hơn về C trong các bài học kế tiếp.

Viết một bình luận