字符指针数组赋值出错?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星
- 暂无评论信息
