gpt4 book ai didi

C 数组传递给函数 : how to absolutely prevent it from being written?

转载 作者:行者123 更新时间:2023-11-30 19:13:44 28 4
gpt4 key购买 nike

我想防止传递给函数的整数数组被更改:使用 const

  • 防止受到影响(=或++:编译错误= OK)

  • 不阻止被扫描! (scanf:仅来自编译器的警告...如何获得编译错误...

有办法做到这一点吗?

编辑1:可能是我不够清楚...我想证明,当添加const时,不可能修改数组的内容...但似乎不是不可能...

编辑2:从你的答案得出的结论:使用C,不可能阻止传递给函数的整数数组在该函数内部被修改(-Wall编译器选项产生错误而不是警告)

我已经阅读过有关 const 放置的内容,但它对我没有帮助。

感谢您的帮助。

代码示例:

#include <stdio.h>
#define mySIZE 4

void testReadOnly1(const int t[])
{
unsigned int i = 0;
for (i=0; i<mySIZE; i++)
{
/*t[i] = 0;*/ /* ERROR : assignment to read-only location */
}
}
void testReadOnly2(const int t[])
{
unsigned int i = 0;
for (i=0; i<mySIZE; i++)
{
printf("%d ",i);
scanf("%d",&t[i]); /* warning : writing into constant object */
}
}
void testReadOnly3(const int const t[])
{
unsigned int i = 0;
for (i=0; i<mySIZE; i++)
{
printf("%d ",i);
scanf("%d",&t[i]); /* warning : writing into constant object */
}
}
void show(const int t[])
{
unsigned int i = 0;
printf("\n");
for (i=0; i<mySIZE; i++)
{
printf("%d ",t[i]);
}
printf("\n");
}
int main ( void )
{
int t[mySIZE];
/*testReadOnly1(t);
show(t);*/
testReadOnly2(t);
show(t);
testReadOnly3(t);
show(t);
return 0;
}

最佳答案

scanf 是一个可变参数函数,int scanf(const char *restrict format, ...);,并且缺少有关您传递的其他参数的任何类型信息进去。如今的 C 编译器确实了解类似 printf/scanf 的行为,并且可以尝试执行一些类型检查,例如将 const 对象传递给 scanf 时收到的警告。我没有看到一种方法可以使特定的警告:写入常量对象 GCC警告变成错误,而不用-Werror使所有警告变成错误,即使修改像这样的 const 对象在技术上是未定义的行为。

关于C 数组传递给函数 : how to absolutely prevent it from being written?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230307/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com