- 在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。
- 数组也可以用字符串常量进行初始化:
Char a[]=”abcdefg”;
如指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变。
如下:
(1)修改指针字符串中的数据
#include <string.h>
#include <stdio.h>
int main(){
char *buf="ABCDEFG";
printf("buf=%c\n",buf[2]);
buf[2]='M';
printf("end!\n");
}
编译通过了,但是会看到程序运行时出错了:
(2)修改数组字符串中的数据
#include <string.h>
#include <stdio.h>
int main(){
char buf[]="ABCDEFG";
printf("buf=%c\n",buf[2]);
buf[2]='M';
printf("buf=%s\n",buf);
printf("end!\n");
}
可以看到程序运行正常:
(--------完--------)