指针和字符串常量
首先比较两段代码
代码1
char ch1[] = "hello";
*ch1 = 'H'; //OK
ch1[0] = 'H'; //OK
printf("%s\r\n",ch1);
代码2
char *ch2 = "world";
*ch2 = 'W'; //运行时错误
ch2[0] = 'W'; //运行时错误
printf("%s\r\n",ch2);
这里的“world”是字符串常量,而“hello”不是。
代码2里,*ch2和ch2[0]其实就是指‘w’,而‘w’是常量自然无法修改!
一般定义成 const char * = “world”;避免上述运行时的错误。
如果想修改字符串的值,就应该定义成代码1的形式!或者如下在堆上申请:
char *s = (char *)malloc(sizeof(char)*6);
strcpy(s, "hello");
s[0] = 'H';
printf("%s\r\n", s);
这个“hello”也不是一个字符串常量,因为是在堆上申请的,也可以用指针来读和写!