是否可以將char 存儲在char數組中,然後在不同的字符之後存儲?例如如何在char數組中存儲' 0'
char* tmp = "My\0name\0is\0\0";
我被教導說實際上是所謂的在C字符串列表,但是當我試圖打印以上(使用printf("%s\n", tmp)
),只印刷
「我的」。
是否可以將char 存儲在char數組中,然後在不同的字符之後存儲?例如如何在char數組中存儲' 0'
char* tmp = "My\0name\0is\0\0";
我被教導說實際上是所謂的在C字符串列表,但是當我試圖打印以上(使用printf("%s\n", tmp)
),只印刷
「我的」。
是的,這肯定是可能的,但是,此外,您不能使用數組作爲串並獲得'\0'
之後存儲的內容。
根據定義,串是char
陣列,由空字符,'\0'
終止。所有與字符串相關的函數都將停止在終止空字節處(例如,一個參數,其實際內容之間包含,傳遞給printf()
中的格式說明符%s
)。
引述術語
的
C11
,章第7.1.1節,定義的字符串是由封端的字符的連續序列,並且包括第一個空字符 。 [...]
但是,對於逐字節處理,只要保留在分配的內存區域內,就可以使用。
所以我怎麼能打印整個東西? –
@UFCInsider遍歷數組,獲取每個元素並打印它們,可能使用'%c'。請記住保留在數組限制範圍之內 –
好吧我現在明白了,謝謝 –
您遇到的問題與您用於打印tmp
的功能有關。如printf函數將假定字符串爲空終止,所以當它看到第一個\ 0
如果你嘗試下面的代碼,你會看到更多的價值在tmp
int main(int c,char** a){
char* tmp = "My\0name\0is\0\0";
write(1,tmp,12);
}
我編輯了我的問題。我怎麼打印? –
@UFCInsider - 這真是一個新問題,不再是'如何礦''0'在一個字符數組' - 創建一個新的問題 – Soren
好吧,我會的,謝謝 –
如何做到這一點將停止你知道它只保存了'My'?它可能保存了整個序列,但打印功能在「看到」空字符'\ 0' –
True,已編輯後停止。那麼我怎麼打印這一切? –
你應該發佈你用來打印'tmp'的代碼 - 問題出在那個代碼上,而不是在字符數組中存儲\ 0的能力 – Soren