2013-08-22 36 views
5

Việc sử dụng luồng char chưa ký là gì.Để in giá trị bên trong con trỏ ký tự Unsigned

Nếu tôi có luồng ký tự chưa ký như bên dưới, làm cách nào tôi có thể in các giá trị bên trong luồng đó.

Đối với dòng hoặc chuỗi ký tự thông thường, tôi có thể in bằng cách sử dụng% s, nhưng còn về điều này.

Xin cảm ơn trước.

unsigned char *ptr ="(some value)" 
+1

Bạn đã thử '% s' chưa? –

+0

'% s' sẽ hoạt động tốt. Ngoài ra, nói chung 'char' có thể hoặc không được' ký'. – Keith

+0

@Keith và KarthikT không phải là loại không khớp và biến thể xác định hành vi không xác định? –

Trả lời

7

Khi nói đến xử lý chuỗi, không có sự khác biệt đáng chú ý giữa unsigned char và đồng bằng char. Sau này có thể được ký hoặc unsigned, nó được thực hiện xác định. Tuy nhiên, tất cả các bảng biểu tượng luôn có chỉ số tích cực. Vì vậy, khi bạn xử lý các chuỗi, bạn luôn có thể truyền an toàn giữa các số unsigned charchar. (Con trỏ phôi giữa hai loại chính thức được xác định kém hành vi theo tiêu chuẩn, nhưng trong thực tế, nó sẽ luôn luôn làm việc trên bất kỳ hệ thống nào từng được thực hiện.)

Do đó printf("%s", ptr); sẽ hoạt động tốt.

3

Mảng char chưa ký thường đại diện cho dữ liệu byte thô và nếu bạn muốn xuất dưới dạng chuỗi bằng cách sử dụng %s, có thể bạn sẽ nhận được các ký tự vô nghĩa, sẽ không có ý nghĩa gì với bạn. Nếu bạn thực sự muốn xem các giá trị, sau đó tôi khuyên bạn nên chuyển đổi một byte đơn thành short và sau đó xuất nó với một %i.

Chỉ quan điểm của tôi.

+1

Đã đồng ý. Bạn nên suy nghĩ về việc sử dụng tương lai của ptr unsigned char của bạn - bạn sẽ sử dụng nó với C-strings thường xuyên, hoặc với byte 'bộ nhớ nguyên'? Lập kế hoạch trước và sử dụng đúng loại đảm bảo trình biên dịch có thể bắt được một lớp các lỗi có thể xảy ra. – usr2564301

+0

Nếu tôi biết nó đang được sử dụng làm dữ liệu byte, thì tôi sử dụng% x. – Jess

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