Tôi phải trả lời một câu hỏi bài tập về nhà cho một trong các lớp học của tôi. Cụ thể, tôi phải nói nếu một số mảng nhất định trong C được coi là chuỗi hay không. Dựa trên bài viết này ( https://www.geekforgeek.org/strings-in-c-2/ ) Tôi biết rằng các chuỗi là một mảng các ký tự có dấu kết thúc null ở cuối.
Hangout chính của tôi là một phần của câu hỏi hỏi về một mảng trông như thế này:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
Đây rõ ràng là một mảng các ký tự có ký tự kết thúc null ở cuối. Tuy nhiên, nó vẫn được coi là một chuỗi vì nó cũng có một ký tự kết thúc null ở giữa? Điều đó sẽ ảnh hưởng đến chuỗi như thế nào?
EDIT: Dựa trên ý kiến, tôi đã cung cấp từ ngữ thực tế của câu hỏi:
"Mảng nào sau đây có thể được coi là" chuỗi "cho mục đích sử dụng chúng làm đối số cho strcpy (), strncpy (), strcmp (), strncmp () và các hàm chuỗi tương tự (biểu thị tất cả các hàm áp dụng)?"
EDIT: Tôi đã gửi email cho giáo sư của tôi về nó vì câu hỏi dường như được nói một cách mơ hồ (như nhiều người đã chỉ ra). Nếu có ai tò mò, anh ấy nói với tôi "Vâng, đó là một chuỗi. Điều quan trọng là có một ký tự null. Nhưng tất nhiên điều đó sẽ ảnh hưởng đến bất kỳ hoạt động chuỗi nào; chuỗi kết thúc ở ký tự null."
strcmp()
. Việc nó có thể được sử dụng làm đối số để đột biến các hàm chuỗi hay không phụ thuộc vào các yếu tố bổ sung không được cung cấp.
c1
có thể thay đổi, vì vậy tôi không hiểu tại sao nó không thể là đối số đích hợp lệ cho strcpy
hoặc tương tự, trừ khi vì nó không đủ lớn để chứa chuỗi nguồn. Điều đó sẽ không làm cho nó không phải là một chuỗi, chỉ là không phù hợp cho một mục đích nhất định.
c1
sẽ đáp ứng các yêu cầu cơ bản cho các đối số chuỗi cho tất cả các hàm chuỗi (hẹp) của thư viện tiêu chuẩn, bao gồm tất cả các hàm được đặt tên cụ thể, nhưng hành vi có thể không phải là những gì người gọi mong đợi hoặc muốn (thậm chí bỏ qua các hành vi không xác định có thể được gợi ra).
char
. Bất kỳ loại nhân vật sẽ làm.
"CS"
có một vài byte rác được nối thêm (trong trường hợp đó, ký tự NUL cuối cùng không liên quan). Nhưng nó không phải là một chuỗi "như một toàn thể". - Tuy nhiên, cho ăn điều này đểstrcpy
vv sẽ không làm cho máy tính của bạn phát nổ vì các chức năng này sẽ chỉ "nhìn thấy""CS"
một phần.