Nó là tốt hơn để sử dụng c_str hoặc toCharArray?


7

Khi đọc / thử một câu trả lời gần đây , tôi rất ngạc nhiên khi thấy Stringlớp Arduino hỗ trợ c_str()phương thức này, giống như lớp C ++ std::string. Như mong đợi, nó xuất hiện để lấy một con trỏ tới nội dung của chuỗi dưới dạng một charmảng kết thúc null (tức là chuỗi kiểu C).

Tuy nhiên, (theo như tôi có thể thấy) phương pháp đó không được đề cập trong tài liệu chính thức của Arduino. Ngoài ra, trong tất cả các mã ví dụ tôi đã thấy bằng cách sử dụng String, một cách tiếp cận khác dường như được sử dụng. Một charbộ đệm thứ cấp được thiết lập và sau đó nội dung của chuỗi được sao chép vào nó bằng cách sử dụng String::toCharArray(). Điều này rõ ràng đòi hỏi gấp đôi bộ nhớ, cộng với thao tác sao chép O (n).

Có vẻ như c_str()nên là cách tiếp cận ưa thích. Có một số lý do tại sao toCharArray()được sử dụng phổ biến hơn?


Bởi vì người dùng Arduino mới không muốn phân nhánh
TheDoctor

Câu trả lời:


3

Có vẻ như c_str()nên là cách tiếp cận ưa thích. Có một số lý do tại sao toCharArray()được sử dụng phổ biến hơn?

về cơ bản, tôi muốn nói rằng đó là sự thiếu kiến ​​thức từ những người làm mã mà bạn đã thấy. Chắc chắn c_str()là tốt hơn. Mặc dù, những gì tôi thấy thậm chí thường xuyên hơn là việc sử dụng các char*chuỗi ký tự thay vì String(và tôi cũng nhận tội về điều đó trong các mã của riêng tôi).

Và đó là vì thư viện Arduino đã được xây dựng dựa trên một tập hợp các thư viện C và C ++ lộn xộn và phong cách mã hóa. Cố gắng làm cho mọi thứ dễ dàng hơn thực sự làm chúng rối tung lên và làm chúng phức tạp hơn.

Đó thực sự là lý do tại sao chúng tôi có các dự án mới như xpcc đang cố gắng sử dụng các khả năng C ++ thực sự và thông minh trong thế giới nhúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.