簡體   English   中英

C 中沒有 null 終止符的字符數組

[英]Character array without a null terminator in C

有時我使用字符序列(字符串),但不需要或不需要 null 終止符,例如,如果我使用memcpy()並且長度已知。 這樣,我更喜歡省略 null 終止符。 一個麻煩的方法是聲明一個數組:

char no_term[5] = {'h', 'e', 'l', 'l', 'o'};

但是,我更喜歡使用帶引號的字符串,因為使用這些字符串進行編程效率更高。 但是,引用的字符串在末尾自動包含 null 終止符。 但是指定數組大小以排除 null 終止符會調用未定義的行為嗎? 以下是有效的 C 嗎,只要我不使用這些需要 null 終止的字符串(例如,將它們傳遞給strlen() )?

char no_term[5] = "hello";
char no_term_array[3][3] = {"foo", "bar", "baz"};

根據ISO C11 標准§6.7.9 ¶14 ,字符類型的 arrays 可以從字符串文字初始化,即使沒有空間用於終止 null 字符。

所以是的,您發布的代碼是有效的,不會調用未定義的行為。

但是請注意,這僅在 C 中是合法的,在 C++ 中是不合法的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM