在网上阅读后,我知道以下是C中未定义的行为:
我想问一下,在以下相关场景中,涉及指针和字符串的行为是否未定义:
\0 //但arr的大小为5。有人能澄清这一点或指出C标准的相关章节吗?
发布于 2018-12-08 12:34:43
char arr1[5] = "geeks"; // extra '\0': ok
char arr2[4] = "geeks"; // extra 's' and '\0': error用'\0'作为额外元素初始化char数组是一个特例。参见C11 6.7.9p14 (重点是我的)
字符类型的数组可以由字符串文字或UTF-8字符串文字初始化,也可以用大括号括起来。字符串文字的连续字节(,包括终止空字符,如果有房间或数组大小未知)初始化数组的元素。
发布于 2018-12-08 12:18:04
char arr[5] = "geeks"; // ok这个语句本身并不是UB。它只是初始化一个char数组(而不是字符串)。
但是,当您开始将它与类似于printf的东西一起使用时,它将变成一个UB:
`printf("%s", arr); // UB`printf("%c",arrptr[7]); // UBhttps://stackoverflow.com/questions/53682351
复制相似问题