字符串字面量与C中的const char *

字符串字面量与C中的const char *,第1张

概述为什么ANSI C编译器在函数调用中标记使用字符串文字参数,其中相应的参数没有const限定符?例如,以下代码可能会通过尝试写入只读内存来生成异常. void somefunc(char buffer[10]);void somefunc(char buffer[10]) { int i; for (i = 0; i < 10; i++) buffer[ 为什么ANSI C编译器在函数调用中标记使用字符串文字参数,其中相应的参数没有const限定符?例如,以下代码可能会通过尝试写入只读内存来生成异常.
voID somefunc(char buffer[10]);voID somefunc(char buffer[10]) {    int i;    for (i = 0;   i < 10;   i++)       buffer[i] = 0;}int main(int argc,char **argv) {    somefunc("literal");    return 0;}

这种情况可能在编译时被识别,但是VS2010和gcc似乎并没有这样做.使用const char *参数调用somefunc将生成编译器警告.

解决方法 gcc:使用标志-Wwrite-strings

PS. gcc手册解释了为什么这不是 – 的一部分.无论如何,一如以往,您应该找到适合您特定需求和编码风格的-W标志的组合.例如,在最近的一个项目中,我使用了这样的一些方法:-Werror -Wall -Wextra -Wformat = 2 -Winit-self -Wswitch-enum -Wstrict-aliasing = 2 -Wundef -Wshadow -Wpointer-arith -Wbad-function -cast -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wold-style-deFinition -Wmissing-prototypes -Wmissing-declaration-Wredundant-decls -Wnested-externs -Winline -WDisabled-optimization -Wunused-macros -Wno-未使用

总结

以上是内存溢出为你收集整理的字符串字面量与C中的const char *全部内容,希望文章能够帮你解决字符串字面量与C中的const char *所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存