use*_*248 1 c arrays string null-terminated undefined-behavior
有时我使用字符(字符串)序列,但不需要或不需要空终止符,例如,如果我正在使用memcpy()并且长度已知。这样,我更喜欢省略空终止符。一个麻烦的方法是声明一个数组:
char no_term[5] = {'h', 'e', 'l', 'l', 'o'};
Run Code Online (Sandbox Code Playgroud)
但是,我更喜欢使用带引号的字符串,因为使用它们进行编程效率更高。但是,带引号的字符串末尾会自动包含一个空终止符。但是指定数组大小以排除空终止符会引发未定义的行为吗?只要我不在需要空终止字符串的地方使用它们(例如,将它们传递给) ,以下C 是否有效?strlen()
char no_term[5] = "hello";
char no_term_array[3][3] = {"foo", "bar", "baz"};
Run Code Online (Sandbox Code Playgroud)
根据ISO C11 标准的 \xc2\xa76.7.9 \xc2\xb614,字符类型的数组可以从字符串文字初始化,即使没有空间用于终止空字符。
\n所以是的,您发布的代码是有效的,不会调用未定义的行为。
\n但请注意,这仅在 C 中合法,在 C++ 中不合法。在 C++ 中,必须有空间用于终止空字符。
\n| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |