指针和字符串常量
首先比较两段代码
代码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”也不是一个字符串常量,因为是在堆上申请的,也可以用指针来读和写!
时间: 2024-10-11 17:57:07