Làm cách nào để xác định độ dài của một ký tự chưa ký *?Làm cách nào để xác định độ dài của một ký tự chưa ký *?
Trả lời
Đối với kích thước thực tế của con trỏ:
size_t s = sizeof(unsigned char*);
Nếu bạn muốn chiều dài của chuỗi:
unsigned char* bla = (unsigned char*)"blabla";
int s = strlen((char*)bla);
"blabla" cho ra một chuỗi chỉ đọc, vì vậy bla phải là const unsigned char *. –
Điều này không nên biên dịch. "blabla" là một const char *, và bạn không thể gán một const char * cho một unsigned char * mà không cần casting. –
Đó không phải là nhiệm vụ - nó khởi tạo - được thực hiện mọi lúc. –
By unsigned char * Tôi cho rằng bạn có nghĩa là các chuỗi tọa lạc tại con trỏ đó. Trong trường hợp đó, nó sẽ là:
strlen(your_string_pointer)
Tuy nhiên, điều này sẽ chỉ tìm vị trí \ 0. Không có garantee đây là kích thước khối bộ nhớ được phân bổ thực tế.
http: //www.cplusplus.com/reference/clibrary/cstring/strlen ... strlen mất một "const char *", không phải là unsigned. – xtofl
Có thể có hai ý nghĩa cho điều này. Bạn chỉ muốn biết loại con trỏ lớn như thế nào? Nếu vậy thì câu trả lời của Joce là chính xác
size_t size = sizeof(unsigned char*);
Nếu bạn muốn biết có bao nhiêu yếu tố con trỏ trỏ đến, phức tạp hơn một chút. Nếu đây là một chuỗi kiểu C thì strlen hoặc một số biến thể là lựa chọn tốt nhất của bạn.
Tuy nhiên, nếu đây chỉ là một con trỏ đến ký tự không dấu có liên quan đến chuỗi kiểu C, thì không có cách nào để đạt được những gì bạn đang tìm kiếm một cách đáng tin cậy. C/C++ không liên kết một trường độ dài với một con trỏ. Bạn sẽ cần phải vượt qua chiều dài xung quanh với con trỏ hoặc sử dụng một lớp như vector lưu trữ cả con trỏ và độ dài.
Bạn đúng về việc không thể lấy lại độ dài được phân bổ - một quyết định thiết kế ngôn ngữ xấu trong mắt của nhiều người. Bạn đang sai về việc có hai ý nghĩa: có thể bạn cần phải biết độ dài của chuỗi có kết thúc bằng 0, mặc dù sẽ tốt hơn nếu sử dụng một ký tự char. Làm cho nó hai-và-một-nửa :) – xtofl
Bạn có muốn chiều dài của con trỏ, đó sẽ là một int. Nếu bạn muốn độ dài của chuỗi đang được trỏ đến, hãy sử dụng strlen: ví dụ: Kích thước của con trỏ: sizeof (unsigned char *) Kích thước của chuỗi: strlen (unsigned char *) ký tự nhiều byte sẽ được báo cáo là ..multi byte
Nếu bạn đang sử dụng C++, và một chuỗi của nó trong một unsigned char *, bạn tốt hơn off đầu tiên đặt nó vào một std :: string trước khi thao tác nó. Bằng cách đó bạn có thể làm đủ mọi thứ với nó và vẫn có thể nhận được độ dài() và/hoặc công suất() của nó bất cứ khi nào bạn muốn.
Tôi giả định rằng bạn đang làm những điều để nói mảng để làm cho kích thước của nó không liên tục. Nếu bạn chỉ phân bổ, thiết lập và quên, bạn luôn có thể lưu trữ kích thước phân bổ thực tế của mảng trong một biến riêng biệt - hoặc tốt hơn, tạo một cấu trúc/lớp.
//WARNING: memory issues not addressed here.
struct myStringStruct
{
unsigned char * string;
int len;
allocate(int size) {
len = size;
string = malloc(sizeof(unsigned char) * len);
}
}
Bất kỳ phức tạp nào hơn thế và bạn đang phát minh lại std :: string.
Trong một thế giới lý tưởng, bạn thì không. Bạn sử dụng char * cho các chuỗi kiểu C (có NUL-terminated và bạn có thể đo chiều dài), và unsigned char * chỉ cho dữ liệu byte (đi kèm với độ dài của nó trong tham số khác hoặc bất kỳ thứ gì) một hộp chứa STL ASAP, chẳng hạn như vector<unsigned char>
hoặc basic_string<unsigned char>
).
Vấn đề gốc là bạn không thể đưa ra các giả định di động về việc các đại diện lưu trữ của char và unsigned char là như nhau hay không. Họ thường là, nhưng họ không được phép. Vì vậy, không có chức năng thư viện giống như chuỗi hoạt động trên unsigned char *, chỉ trên char *, và nó không phải là nói chung an toàn để đúc unsigned char * để ký char * và xử lý kết quả như là một chuỗi. Vì char có thể được ký, điều này có nghĩa là không có phép đúc unsigned char * đến char *.
Tuy nhiên, 0 luôn có cùng một giá trị đại diện trong unsigned char và char. Vì vậy, trong một thế giới không lý tưởng, nếu bạn có một chuỗi C-style từ đâu đó nhưng nó đã đến như là một unsigned char *, sau đó bạn (a) cast nó để char * và nhận được với nó, nhưng cũng (b) tìm ra ai đã làm điều này cho bạn, và yêu cầu họ vui lòng dừng lại.
- 1. Tôi làm cách nào để xác định chuỗi ký tự chưa ký *?
- 2. Làm cách nào để khởi tạo loại dài chưa ký?
- 3. T-SQL: Cách lấy độ dài chính xác của một chuỗi ký tự?
- 4. Độ dài ký tự tối đa UUID
- 5. Làm cách nào để giới hạn độ dài của chuỗi thành 150 ký tự?
- 6. Làm cách nào để xác định hiệu quả palindrome ký tự cá nhân dài nhất trong một chuỗi đã cho?
- 7. Làm cách nào để kiểm tra xem ký tự thuần túy có được ký hoặc chưa ký?
- 8. Trình định dạng định dạng cho ký tự ngắn chưa được ký là gì?
- 9. Cách xác định độ dài (in) của chuỗi std :: với các ký tự tab được mở rộng?
- 10. Làm cách nào để xác định độ rộng hộp văn bản SVG hoặc ngắt dòng sau ký tự 'x'?
- 11. Chỉ hiển thị 10 ký tự của một chuỗi dài?
- 12. Làm cách nào để tìm loại ký tự hai chiều của ký tự Unicode trong C#?
- 13. Xác định ký tự làm ranh giới từ
- 14. Làm thế nào để xác định liệu một ký tự là một chữ cái trong Java?
- 15. Không thể lấy giá trị dài chưa ký của NSNumber
- 16. Làm cách nào để xác định phần tương tự dài nhất của một số chuỗi?
- 17. Nhận độ dài QString theo byte (không phải ký tự)
- 18. Làm cách nào để tìm mã ký tự của một ký tự đặc biệt trong trình soạn thảo văn bản?
- 19. Làm cách nào để điền một chuỗi độ dài không xác định trong Powershell?
- 20. Sử dụng scanf để đọc một ký tự chưa được ký
- 21. Kiểm tra độ dài ký tự trong ruby
- 22. Làm cách nào để xác định độ dài byte của chuỗi được mã hóa utf-8 bằng Python?
- 23. Đo chiều dài của chuỗi chứa ký tự rộng
- 24. Cách giới hạn độ dài tối đa của văn bản WPF DataGridTextColum thành 10 ký tự
- 25. Làm cách nào để xác định độ dài của khung Ethernet II?
- 26. Làm cách nào để chỉ định một dải các ký tự unicode
- 27. Truy vấn SQL: đặt hàng theo độ dài ký tự?
- 28. Xác định độ rộng của ký tự được hiển thị trong .NET
- 29. Cách xác định chuỗi ký tự bằng dòng lệnh gcc?
- 30. Làm thế nào để xác định độ dài của một Fixnum trong Ruby?
Hầu hết các câu trả lời cho biết nhu cầu xác định ý nghĩa của "chiều dài": số lượng phần tử, kích thước của biến chứa con trỏ hoặc bạn có thể tham chiếu đến ký tự (unsigned?) Bằng chuỗi không kết thúc? – xtofl