2012-12-02 24 views
8

Tôi cần phải tìm nếu mảng char bắt đầu bằng "ADD". Tôi biết sử dụng strcmp(), nhưng tôi không biết làm thế nào để có được ba ký tự đầu tiên. Tôi thực sự ghét làm việc với c-strings. Làm thế nào tôi có thể lấy một lát của một mảng char như char buffer[1024]?Làm thế nào tôi có thể cắt một chuỗi trong C?

Trả lời

9

Sử dụng strncmp("ADD", buffer, 3).

Tôi không chắc chắn ý bạn là gì bởi "lát" nhưng bất kỳ con trỏ nào bên trong buffer đều có thể được coi là một lát. Ví dụ: nếu buffer là một chuỗi bắt đầu bằng "ADD" thì char *slice = buffer + 3 là cùng một chuỗi với "ADD" bị xóa. Lưu ý rằng slice sau đó là một phần của buffer và sửa đổi nội dung của slice sẽ sửa đổi nội dung của buffer. Và cách khác vòng.

Nếu bằng "lát" bạn có nghĩa là một bản sao độc lập thì bạn phải cấp phát một khối bộ nhớ mới và sao chép các phần thú vị từ buffer vào bộ nhớ của bạn. Các chức năng thư viện strdupstrndup rất tiện lợi cho việc này.

+0

Làm thế nào người ta có thể chỉ định một bù đắp và chấm dứt đó là ngắn hơn chuỗi char ban đầu? Giống như "hello" + 1 size 3 (do đó "ell"); Đó là những gì có nghĩa là bởi lát tôi tin. May mắn strncmp và printf cung cấp các tùy chọn để làm việc với điều này, nhưng nó sẽ được gọn gàng để hiển thị này như là một chuỗi char – scape

+0

@scape Xem [Làm thế nào để trích xuất một chuỗi con từ một chuỗi trong C?] (Https://stackoverflow.com/questions/19555434) – kmkaplan

+0

"strtok thường thay thế các dấu phân tách bằng '\ 0' vì nó" ăn "đầu vào." mà rõ ràng có một số nhược điểm. – scape

8

Sử dụng strncmp .Assuming đệm là biến để kiểm tra, chỉ

strncmp (buffer,"ADD",3); 
Các vấn đề liên quan