请问:指向字符串的指针为何不能用来修改此字符串(c语言)
请教:指向字符串的指针为何不能用来修改此字符串(c语言)
各位大侠:
我原本打算使用指向一个字符串的指针来修改这个字符串,代码如下:
但是出运行时错误。
----------------------
我用数组下标的方式是可以修改的:
----------------------
请大侠赐教为什么使用指针不能修改指向的这个字符串呢,谢谢!
------解决方案--------------------
char *m = "hello";这个是常量,不能修改
------解决方案--------------------
有种东西叫字符串常量,理解为只读
------解决方案--------------------
char *m = "hello";<=>const char*m="hello";
------解决方案--------------------
char *m = "hello";
"hello"保存在静态数据区,该数据不能修改.
由指针m指向. 不能通过指针m来修改静态数据区的值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.
------解决方案--------------------
------解决方案--------------------
char *m = "hello";
"hello"保存在文字常量区,该数据不能修改,默认有只读属性.
由指针m指向. 不能通过指针m来修改此值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.
------解决方案--------------------
指针哪里都能指,不过你碰巧指向了不可更改的地方。
------解决方案--------------------
指针可以指向常量
不过常量的内容还是不能修改啊
各位大侠:
我原本打算使用指向一个字符串的指针来修改这个字符串,代码如下:
- C/C++ code
char *m = "hello"; *(m+1) = 's'; for(;*m != '\0';m++){ printf("%c\n",*m); }
但是出运行时错误。
----------------------
我用数组下标的方式是可以修改的:
- C/C++ code
int i = 0; char w[] = "hello"; w[1] = 's'; while(w[i] != '\0'){ printf("%c\n",w[i]); i++; }
----------------------
请大侠赐教为什么使用指针不能修改指向的这个字符串呢,谢谢!
------解决方案--------------------
char *m = "hello";这个是常量,不能修改
------解决方案--------------------
有种东西叫字符串常量,理解为只读
------解决方案--------------------
char *m = "hello";<=>const char*m="hello";
------解决方案--------------------
char *m = "hello";
"hello"保存在静态数据区,该数据不能修改.
由指针m指向. 不能通过指针m来修改静态数据区的值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.
------解决方案--------------------
------解决方案--------------------
char *m = "hello";
"hello"保存在文字常量区,该数据不能修改,默认有只读属性.
由指针m指向. 不能通过指针m来修改此值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.
------解决方案--------------------
指针哪里都能指,不过你碰巧指向了不可更改的地方。
------解决方案--------------------
指针可以指向常量
不过常量的内容还是不能修改啊