This question already has answers here:
Closed 5 years ago.
Why do I get a segmentation fault when writing to a string initialized with “char *s” but not “char s[]”?
(17个答案)
如果我将一个字符重新指派给*p,则发生的更改在哪里。
*p='a'应该在字符串中用'a'替换'h'。
*p应该访问由p指向的字符串的基元素并替换它。
但是print语句同时打印“hello”
但没人能解释为什么??
是非法的,因为
然后编译器将拒绝此程序,因为修改文本字符串无效。
(17个答案)
如果我将一个字符重新指派给*p,则发生的更改在哪里。
#include<stdio.h>
int main()
{
char* p="hello" ;
printf("%s",p);
*p='a' ;
printf("%s",p);
return 0;
}
*p='a'应该在字符串中用'a'替换'h'。
*p应该访问由p指向的字符串的基元素并替换它。
但是print语句同时打印“hello”
但没人能解释为什么??
最佳答案
这:
*p='a' ;
是非法的,因为
p
指向文本字符串。不幸的是,由于历史原因,C允许您将文本字符串的地址存储在非常量指针中,而无需任何强制转换或警告。但实际上,你应该这样做:const char* p="hello" ;
然后编译器将拒绝此程序,因为修改文本字符串无效。