在 const 数组上使用 memset() 函数是否合法?
Is it legal to use memset() function on `const` array?
在下面的代码中,const
数组的元素被 memset
函数清除。
#include <stdio.h>
#include <string.h>
int main() {
const int a[3] = {1, 2, 3};
memset(a, 0, sizeof(a));
printf("%d %d %d\n",a[0],a[1],a[2]);
return 0;
}
在 const
数组上使用 memset
合法吗?
没有.
不要尝试修改声明为 const
的数组的内容,否则结果是 未定义的行为。
在该示例中,const int a[3];
的元素由对 memset
的调用填充,该调用生成警告,因为 memset
函数采用(非常量)指针指向void,编译器必须隐式丢弃 const
.
C11 6.7.3 类型限定符:
脚注 132:
The implementation may place a const
object that is not volatile
in a
read-only region of storage. Moreover, the implementation need not
allocate storage for such an object if its address is never used.
在下面的代码中,const
数组的元素被 memset
函数清除。
#include <stdio.h>
#include <string.h>
int main() {
const int a[3] = {1, 2, 3};
memset(a, 0, sizeof(a));
printf("%d %d %d\n",a[0],a[1],a[2]);
return 0;
}
在 const
数组上使用 memset
合法吗?
没有.
不要尝试修改声明为 const
的数组的内容,否则结果是 未定义的行为。
在该示例中,const int a[3];
的元素由对 memset
的调用填充,该调用生成警告,因为 memset
函数采用(非常量)指针指向void,编译器必须隐式丢弃 const
.
C11 6.7.3 类型限定符:
脚注 132:
The implementation may place a
const
object that is notvolatile
in a read-only region of storage. Moreover, the implementation need not allocate storage for such an object if its address is never used.