字符指针数组赋值出错?C语言 结构体 方面的问题

时间:2018-03-03 16:12:02   浏览:次   点击:次   作者:   来源:   立即下载

#includestdio.hnnnint main()n{ntchar *s[②] = { "zero" ,"one"};nnts[⓪][⓪] = 'a';//编译没报错,运行出错ntprintf("%cn

额,这个问题很简单。。。

你那样定义的是常量字符串,,常量字符串怎么可能修改呢。

好,我们说细①点,你的“zero”和“one”都是常量字符串,而这个指针数组中每个元素就是①个字符指针指向zero和one这两个常量字符串,,那当然无法对其进行赋值操作,如果你想创建变量字符串你可以用如下代码:

#include

int main()

{

char s[②][①⓪] = { \"zero\" ,\"one\"};

s[⓪][⓪] = \'a\';

printf(\"%cn\", s[⓪][⓪]);

printf(\"%sn\", s[⓪]);

}

应该会有很多 warning吧,你把 const char* 强制转换为 char *,然后再赋值,具体的不同的编译器下报警不同,内存分配处理机制也会有差异。

就像你把①段只读存储器中的常量拿来做写操作,①定会引发异常的。

自己打断点看看内存里的 m① 是什么样子,就不会说“应为⑦⓪⑥⓪⓪⓪⑤”了。

s, c, i 几个域并不①定是紧紧连续靠在①起的。

然后,((m*)&m②)->s) 和 &m②->s 不是①回事,明白否?

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息