2017-01-08 86 views
4

是否可以將char 存儲在char數組中,然後在不同的字符之後存儲?例如如何在char數組中存儲' 0'

char* tmp = "My\0name\0is\0\0"; 

我被教導說實際上是所謂的在C字符串列表,但是當我試圖打印以上(使用printf("%s\n", tmp)),只印刷

「我的」。

+2

如何做到這一點將停止你知道它只保存了'My'?它可能保存了整個序列,但打印功能在「看到」空字符'\ 0' –

+0

True,已編輯後停止。那麼我怎麼打印這一切? –

+0

你應該發佈你用來打印'tmp'的代碼 - 問題出在那個代碼上,而不是在字符數組中存儲\ 0的能力 – Soren

回答

5

是的,這肯定是可能的,但是,此外,您不能使用數組作爲並獲得'\0'之後存儲的內容。

根據定義,char陣列,空字符,'\0'終止。所有與字符串相關的函數都將停止在終止空字節處(例如,一個參數,其實際內容之間包含,傳遞給printf()中的格式說明符%s)。

引述術語

C11,章第7.1.1節,定義的字符串是由封端的字符的連續序列,並且包括第一個空字符 。 [...]

但是,對於逐字節處理,只要保留在分配的內存區域內,就可以使用。

+0

所以我怎麼能打印整個東西? –

+0

@UFCInsider遍歷數組,獲取每個元素並打印它們,可能使用'%c'。請記住保留在數組限制範圍之內 –

+0

好吧我現在明白了,謝謝 –

1

您遇到的問題與您用於打印tmp的功能有關。如printf函數將假定字符串爲空終止,所以當它看到第一個\ 0

如果你嘗試下面的代碼,你會看到更多的價值在tmp

int main(int c,char** a){ 
    char* tmp = "My\0name\0is\0\0"; 
    write(1,tmp,12); 
} 
+0

我編輯了我的問題。我怎麼打印? –

+0

@UFCInsider - 這真是一個新問題,不再是'如何礦''0'在一個字符數組' - 創建一個新的問題 – Soren

+0

好吧,我會的,謝謝 –

相關問題