如果我有一個包含NULL字節的字符指針,是否有任何內置函數可以用來查找長度,還是我只需要編寫自己的函數?順便說一句我正在使用gcc。C語言程序設計:查找空字符的長度
編輯:
應該提到的字符指針是使用malloc()創建的。
如果我有一個包含NULL字節的字符指針,是否有任何內置函數可以用來查找長度,還是我只需要編寫自己的函數?順便說一句我正在使用gcc。C語言程序設計:查找空字符的長度
編輯:
應該提到的字符指針是使用malloc()創建的。
如果您有指針那麼知道大小的唯一方法是單獨存儲大小或具有終止字符串的唯一值。 (通常爲'\0'
)如果你沒有這些,就根本無法完成。
編輯:既然你已經指定你使用0分配緩衝區,那麼答案就是上面的段落。你需要記住你用malloc
分配了多少錢,或者只是有一個終止值。
如果你碰巧有一個陣列(如:char s[] = "hello\0world";
),那麼你可以求助於sizeof(s)
。但是要非常小心,當你用指針進行嘗試時,你會得到指針的大小,而不是數組的大小。 (但strlen(s)
將等於5
,因爲它計數到第一個'\0'
)。
此外,陣列衰減指向傳遞給函數的指針。所以如果你將數組傳遞給一個函數,你就回到了原點。
注:
void f(int *p) {}
和
void f(int p[]) {}
和
void f(int p[10]) {}
都相同。在所有3個版本中,p
是指針,而不是數組。
我會用'char s [] =「hello \ 0world」'來代替你的例子,將它與問題聯繫起來。 –
@Jim:夠公平的:-) –
如何知道字符串結束位置,如果它包含NULL字節作爲其一部分?當然,沒有內置的函數可以像這樣的字符串工作。它會將第一個空字節解釋爲字符串的結尾。
如果你想要的長度,你必須自己存儲它。請記住,否標準庫字符串函數將在像這樣的字符串上正常工作。
你需要自己跟蹤長度。
C字符串是空終止,這意味着第一個空字符表示字符串的結尾。所有內置的字符串函數都依賴於這個函數,所以如果你有一個可以包含NULL的緩衝區作爲數據的一部分,那麼你就不能使用它們。
由於您使用的是malloc
,因此您可能需要跟蹤兩種大小:分配的緩衝區大小以及該緩衝區中有多少個字符構成有效數據。
首先,字符指針不包含NUL字節,它們指向包含NUL字節的內存。其次,你如何定義包含NUL字節的字符串的長度?那就是,你怎麼知道你已經到了最後? –