c – 定义字符串数组

c – 定义字符串数组,第1张

概述我想定义一个像这样的字符串数组: #define sup (const char**) ("string1", "string2") 但是当我尝试打印第一个字符串时它失败了: printf("The string: %s\n",sup[0]); 怎么以正确的方式做到这一点? 我建议不要完全使用宏来做这件事,但是如果你真的对代码的内容感兴趣 – 而不是实际应该如何处理它,这里有一个解释. 代码中存在 我想定义一个像这样的字符串数组:

#define sup (const char**) ("string1","string2")

但是当我尝试打印第一个字符串时它失败了:

printf("The string: %s\n",sup[0]);

怎么以正确的方式做到这一点?

解决方法 我建议不要完全使用宏来做这件事,但是如果你真的对代码的内容感兴趣 – 而不是实际应该如何处理它,这里有一个解释.

代码中存在一个简单的问题,而且更加模糊.非常简单的是声明一个数组,你不使用括号,而是使用花括号:

#define sup (const char**){"str1","str2"} // still wrong!!

不太简单的问题是数组不是指针.花括号初始化程序可用于初始化两个const char *的数组,但这与const char **不同.如果您将代码更改为:

#define sup (const char*[2]){"str1","str2" }

它应该工作.

以前的版本引擎盖下发生了什么?好吧,编译器正在看到指针的声明(好吧,转换为指针)和初始化器.假设您想要使用第一个元素初始化指针(不兼容的指针,但是强制转换是明确的……如果强制转换,则必须知道您想要的内容),然后忽略余数.基本上编译器会将您的代码转换为[*]:

#define sup (const char**)"str1"

这将在运行时造成破坏.有趣的是,如果你使用了一个合适的变量,然后用它初始化了指针,它就会起作用,因为虽然数组不是指针(我坚持,记住这一点)数组会衰减成指针:

const char* tmp[] = { "hi","there" };const char** sup = tmp;              // fine,tmp decays into &tmp[0]

[*]那里有一些hanDWaving …编译器翻译代码,一旦插入到预处理器的宏使用位置,但翻译等同于我手动编辑宏时所写的内容.

总结

以上是内存溢出为你收集整理的c – 定义字符串数组全部内容,希望文章能够帮你解决c – 定义字符串数组所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存