[英]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.