String[0][0] ="a";为什么赋值会崩溃啊

cruzcui 2013-07-12 08:30:26
char *String[3] = {0};
String[0] = "aaa";
String[1] = "bbbbb";
String[2] = "ccccccccc";
String[0][0] = "a";
指针这里弄不明白了
谁能帮忙详细解答一下
指针为什么能赋值,里面不是保存地址的吗
...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
0xAA55 2013-07-13
  • 打赏
  • 举报
回复
char *String[3]={0}; 其中的String[0]、String[1]、String[2]都是char*类型,初始化为0。 那么String[0][0]相当于((char*)0)[0],或者*(char*)0 直接引用0肯定会死的啦
LubinLew 2013-07-12
  • 打赏
  • 举报
回复
① LZ你要明白String[0][0]代表的类型是char。 因为String[0]是一个char型指针, String[0][0] = *(String[0] + 0) 你将一个4字节的指针赋值给一个char,不光数据丢失还没有意义.

 String[0][0] = "a";
②ANSI C明确说明:修改字符串常量,效果是未定义的。 大多数的编译器是不支持修改字符串常量,例如Linux下就是Segmentation fault 但是TC2.0就支持就支持修该字符串常量.不同编译器的实现不同. 所以LZ为了程序的移植性,C 最好还是使用ANSI C规范.
艾薇儿More 2013-07-12
  • 打赏
  • 举报
回复
String[0][0]相当于你定义一个二维数组中第一个元素的值,但是你这个就是个指针数组,长度是不确定的,两者是有区别的,不能用访问二维数组的方式来访问指针数组。除非你写成char String[][9]矩阵形式,但是这样的话长度就确定了。
AnYidan 2013-07-12
  • 打赏
  • 举报
回复
引用 3 楼 adlay 的回复:
修改只读内存了. 字符串常量会被编译的到可执行文件的只读数据区. 然后这里只是把这个数据里面对应的地址赋值给了变量. 一旦去修改这个只读的内存, 就会发生内存保护异常.
++
alexmayer 2013-07-12
  • 打赏
  • 举报
回复
这个要仔细想想,还真是基础不牢。标记一下。
minnnnmi 2013-07-12
  • 打赏
  • 举报
回复
	char ch1[] = "aaa";
	char ch2[] = "bbbbb";
	char ch3[] = "cccccccc";

	char *String[3] = {0};
	String[0] = ch1;
	String[1] = ch2;
	String[2] = ch3;

	String[0][0] = 'a';
qzf362269994 2013-07-12
  • 打赏
  • 举报
回复
String[0][0] = ‘a’(String[0][0]char型变量只有一个字节);企图修改只读区中"aaa"的内容,是不可行的;
www_adintr_com 2013-07-12
  • 打赏
  • 举报
回复
修改只读内存了. 字符串常量会被编译的到可执行文件的只读数据区. 然后这里只是把这个数据里面对应的地址赋值给了变量. 一旦去修改这个只读的内存, 就会发生内存保护异常.
cruzcui 2013-07-12
  • 打赏
  • 举报
回复
赋值‘a’一样会崩溃
图灵狗 2013-07-12
  • 打赏
  • 举报
回复
字符串赋值要用strcpy函数,String[0][0]是字符,所以应该是 = 'a'才对。
引用 楼主 cruzcui 的回复:
char *String[3] = {0}; String[0] = "aaa"; String[1] = "bbbbb"; String[2] = "ccccccccc"; String[0][0] = "a"; 指针这里弄不明白了 谁能帮忙详细解答一下 指针为什么能赋值,里面不是保存地址的吗

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧