Trả về Chuỗi từ Hàm C

Tra Ve Chuoi Tu Ham C



MỘT sợi dây là một dãy các ký tự bao gồm một ký tự hoặc nhiều ký tự và là một cấu trúc dữ liệu quan trọng trong lập trình máy tính. Khi làm việc với dây trong C, các hoạt động nhất định được yêu cầu phải được thực hiện trên sợi dây kiểu dữ liệu chẳng hạn như khởi tạo sợi dây , gán nội dung, nối các dây , so sánh dây , và trả về sợi dây .

Bài viết này tập trung vào một hoạt động như vậy trong sợi dây cấu trúc dữ liệu, đang trả về một sợi dây từ một chức năng C.







Trả về Chuỗi từ Hàm C

BẰNG sợi dây là một mảng các ký tự và để trả về chuỗi từ hàm C, một con trỏ tới cấu trúc dữ liệu chuỗi cần được chuyển dưới dạng đối số từ hàm gọi đến hàm được gọi dưới dạng tham số. Sau đó, con trỏ có thể được sử dụng để trỏ đến một mảng ký tự. Khi con trỏ trỏ đến một mảng ký tự, sợi dây giá trị có thể được trả về từ hàm được gọi bằng câu lệnh return.



Bạn có thể xem ví dụ dưới đây để hiểu rõ hơn.



#include

const char * tên của tôi ( ) {
trở lại 'John' ;
}

int chính ( khoảng trống ) {
bản inf ( '%S' , tên của tôi ( ) ) ;
}





Trong đoạn code trên, thay vì khai báo biến như bình thường, chúng ta sử dụng một con trỏ với nó để khi trả về chuỗi này sẽ không xảy ra lỗi.

đầu ra




Một hàm C không thể trả về một sợi dây đã được chỉ định làm biến cục bộ vì biến đó sẽ bị xóa (giải phóng) ngay lập tức khi hàm chạy xong, khiến nó không khả dụng và gây ra cảnh báo như sau:

#include

const char myName ( ) {
tên ký tự = 'John' ;
trở lại tên;
}

int chính ( khoảng trống ) {
bản inf ( '%S' , tên của tôi ( ) ) ;
}

Trong mã này, một cảnh báo được kích hoạt khi chuỗi đang được trả về không có con trỏ bất kỳ.

đầu ra


Vì vậy, bạn có thể viết mã theo cách sau:

#include

const char * tên của tôi ( ) {
than * tên = 'John' ;
trở lại tên;
}
int chính ( khoảng trống ) {
bản inf ( '%S' , tên của tôi ( ) ) ;
}

đầu ra


Các biến được phân bổ trên ngăn xếp theo mặc định, đó là lý do thực sự cho câu lệnh trên. Tuy nhiên, khi một con trỏ được khai báo, giá trị mà nó trỏ tới sẽ được phân bổ trên heap, giá trị này sẽ không bị xóa sau khi chức năng kết thúc. Khi bộ nhớ được cấp phát, một bản sao của sợi dây cần được tạo từ vị trí bộ nhớ ban đầu được trỏ bởi con trỏ và bản sao cần được trả về từ hàm được gọi. Hàm gọi sau đó sẽ có quyền kiểm soát dữ liệu chuỗi gốc, trong khi hàm được gọi chịu trách nhiệm giải phóng không gian được phân bổ.

Phần kết luận

Hàm C có thể lấy một con trỏ tới sợi dây làm đối số và trả về sợi dây giá trị là kết quả của các hoạt động được thực hiện trong chức năng được gọi. Cách tiếp cận để đạt được điều này là sử dụng một con trỏ char*. Chức năng gọi sẽ chịu trách nhiệm về bộ nhớ được phân bổ để lưu trữ sợi dây , trong khi hàm được gọi chịu trách nhiệm giải phóng không gian được cấp phát.