|
|
1
2
不,这不安全——但是 如果它编译 它几乎肯定会按照预期工作。
这很好;该标准特别允许字符类型的数组(包括
这是一个 约束违反 ,需要编译时诊断。(这几乎等同于C标准所说的非法行为。)
的第一个参数
许多C编译器在严格执行标准要求方面有些松懈。在许多情况下,编译器会对包含约束冲突的代码发出警告——这是完全有效的。但是,一旦编译器诊断出约束冲突并继续生成可执行文件,则该可执行文件的行为不受C标准的定义。
据我所知,任何不拒绝此调用的实际编译器都会生成行为与您期望的一样的代码
如果添加显式转换:
删除了约束冲突,可能会使任何警告静音——但行为仍然严格未定义。
然而,在实践中,大多数编译器试图处理
|
|
2
1
根据C11标准(ISO/IEC 9899:2011§7.24.1字符串处理惯例,3,增加强调):
注:C99标准中没有此段落。 所以我看不出有什么问题。 |