2012-08-05 42 views
5

tôi bắt đầu chuỗi và chuỗi chức năng học tập (từ một cuốn sách), tôi đã học các chức năng như strcpystrcatstrncat ..etcC++: Các hàm chuỗi mà không <cstring>

Vì vậy, tôi bắt đầu tập sử dụng chúng trong các chương trình đơn giản để có được ý thức về những gì họ làm.

Sau đó, tôi đã ngạc nhiên sau đó trong cuốn sách nó nói với tôi rằng tôi phải sử dụng #include <cstring> để sử dụng tất cả các chức năng chuỗi này.

Tôi đã thử sử dụng các hàm chuỗi nhiều lần mà không bao gồm <cstring> vậy tại sao?

Tệp tiêu đề duy nhất tôi đưa vào là <iostream> nhưng tôi có thể sử dụng các hàm chuỗi.

Vui lòng ai đó giải thích cho tôi lý do tại sao chức năng chuỗi hoạt động mà không cần <cstring> và tôi có cần bao gồm nó để sử dụng chức năng chuỗi hay không và không sử dụng số <cstring> là gì;

+1

Trình biên dịch nào bạn đang sử dụng? Ngoài ra, bạn nên học tốt hơn 'std :: string' và các lớp liên quan. Thao tác 'char *' s không phải là thứ bạn nên làm thường xuyên trong C++. – Mat

+0

Im sử dụng Microsoft Visual C++ 2010 Express –

Trả lời

4

Trước hết, bạn hoàn toàn cần xem xét chuyển sang std::string. Phân bổ bộ nhớ thủ công, trong khi là một nhiệm vụ thú vị và đôi khi đầy thử thách, không nên là một phần của công việc hàng ngày của bạn.

Có nói rằng, có lẽ <cstring> đã đượC#bao gồm bởi một số tiêu đề khác mà bạn đang sử dụng trong dự án của mình. Tuy nhiên tốt hơn là không phụ thuộc vào các tiêu đề khác bao gồm <cstring> (không ai đảm bảo rằng chúng sẽ luôn hoạt động và cho mọi trình biên dịch), và bao gồm nó ở nơi thích hợp.

+0

Im vẫn còn mới với C++ và havent học về std :: string yet –

+0

Ngoài ra chương trình của tôi là một chương trình đơn giản mà làm cho 2 dây và bản sao một đến khác ouputs. Không có gì ưa thích –

+1

@Mohamed: std :: string thực sự là cách C++ thích hợp của thao tác chuỗi – Vlad

2

Đối với tất cả khả năng, phiên bản thư viện chuẩn C++ của bạn thực hiện một số tính năng của iostream với các hàm thư viện chuẩn c được đặt trong chuỗi. Vì vậy, khi bạn bao gồm các tập tin tiêu đề iostream, điều này sẽ có một chỉ thị #include cung cấp cho bạn cstring.

4

Bạn không cần phải bao gồm <cstring> vì nó được bao gồm bởi iostream.

Tuy nhiên lưu ý rằng chức năng bạn đang nói về (strcpy, strcat, strncat) là C chức năng chụp char * và có C++ tương đương của họ làm việc với thuận tiện hơn std::string.

strcpy: std::string::operator=

std::string str2; 
std::string str1 = str2; // copy str2 in str1 

strcat: std::string::operator+=

str1 += str2; // concat str2 to str1 

strncat:

str1 += str2.substr(0,n); // concat the first n characters of str2 to str1 
3

Điều đó sẽ chỉ đơn giản có nghĩa là <cstring> đã được bao gồm bởi <iostream>. Khi bạn bao gồm <iostream>, bạn cũng ngầm bao gồm <cstring> thông qua nó.

Lưu ý rằng thường không được bảo đảm rằng <cstring> được bao gồm bởi <iostream>. Bạn vừa may mắn rằng việc triển khai cụ thể của bạn đã xảy ra để có sự bao gồm đó. Trong một triển khai khác có thể không phải như vậy.

Các vấn đề liên quan