2010-08-06 9 views
6

Tôi đang cố dịch một dự án lớn từ C++ sang Delphi và tôi đang hoàn tất bản dịch. Một trong những thứ tôi để lại là quái vật '\ 0'.' 0' trong C++ là gì?

if (*asmcmd=='\0' || *asmcmd==';') 

trong đó asmcmd là char *.

Tôi biết rằng \ 0 đánh dấu sự kết thúc của loại mảng trong C++, nhưng tôi cần biết nó là một byte. Có 0 không?

Nói cách khác, mã dưới đây có tương đương với dòng C++ không?

if(asmcmd^=0) or (asmcmd^=';') then ... 

trong đó asmcmd là PAnsiChar.

Bạn không cần biết Delphi để trả lời câu hỏi của tôi, nhưng hãy cho tôi biết \ 0 là byte. Điều đó cũng có tác dụng. :)

Trả lời

13

'\0' bằng 0. Đó là một di tích từ C, mà không có bất kỳ loại chuỗi nào cả và sử dụng mảng char thay thế. Ký tự null được sử dụng để đánh dấu sự kết thúc của một chuỗi; không phải là một quyết định rất khôn ngoan khi nhìn lại - hầu hết các triển khai chuỗi khác sử dụng biến truy cập chuyên dụng ở đâu đó, điều này làm cho việc tìm kiếm kết thúc của chuỗi O (1) thay vì O (n) của C.

*asmcmd=='\0' chỉ là một cách phức tạp để kiểm tra length(asmcmd) == 0 hoặc asmcmd.is_empty() bằng ngôn ngữ giả định.

+3

Sự phức tạp, có lẽ ... nhưng điều quan trọng là phải biết khi nào bạn nên ** sử dụng ''\ 0''. Một ví dụ là 'for (char * c = str; * c! = '\ 0'; C++)' vs 'cho (int i = 0; i David

+3

@David: "' * c! = '\ 0'' "tại sao không chỉ' (char * c = str ; * c; C++) '? – SigTerm

+0

cảm ơn bạn, điều này hoàn toàn khác với những gì tôi nghĩ. :) – qwerty101

3

Đó là thẻ cho null hoặc char giá trị 0. Nó được sử dụng ở cuối chuỗi.

+0

Vì vậy, nó là 0 như tôi nghĩ. Cảm ơn bạn! – qwerty101

+0

không, nó chỉ có nghĩa là "kết thúc chuỗi". – Weboide

+2

'\ 0' không phải là' null' nhưng 'NUL' :) Cái cũ là một con trỏ, sau đó là một ký tự. – fredoverflow

5

Đúng là trình tự thoát cho ký tự có giá trị bát phân bằng 0 (tất nhiên là 0 trong bất kỳ cơ sở nào).

Mặc dù bạn có thể sử dụng bất kỳ số nào được đặt trước bằng 0 để chỉ định mã ký tự bát phân (ví dụ: '\040' là ký tự khoảng trắng trong mã ASCII), bạn hiếm khi có nguyên nhân làm như vậy. '\ 0' là thành ngữ để chỉ định ký tự NUL (vì bạn không thể nhập ký tự như vậy từ bàn phím hoặc hiển thị nó trong trình soạn thảo của bạn).

Bạn có thể chỉ định bằng nhau '\ x0', là ký tự NUL được biểu thị bằng hệ thập lục phân.

Ký tự NUL được sử dụng trong C và C++ để chấm dứt chuỗi được lưu trữ trong một mảng ký tự. Biểu diễn này được sử dụng cho các hằng số chuỗi ký tự và theo quy ước cho các chuỗi được điều khiển bởi thư viện <cstring>/<string.h>. Trong C++ std :: string class có thể được sử dụng thay thế.

Lưu ý rằng trong C++, hằng số ký tự như '\0' hoặc 'a' có loại char. Trong C, vì lý do có thể che khuất, nó có loại int.

+0

Tôi đã đưa ra +1 chỉ để nói NUL thay vì null, nhưng phần còn lại là khá tốt quá ... –