user-0 提问: 求教C语言字符串替换，在线等。

回复:
user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:char *sstring = "abcd"; //定义一个常量字符串abcd，再将char指针变量sstring的值保存为该常量字符串的地址 char sstring[100] = "abcd"; //定义一个100项的char字符数组sstring，再将该数组的前五个字节赋值为0x41,0x42,0x43,0x44,0x00  常量字符串abcd保存在常量区，该内存区的控制属性默认为不可写。一旦企图写，操作系统的内存管理模块发现并弹出对话框报异常。  #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 赵老师解释的非常到位。常量区的数据不可写。

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] char *sstring = "abcd"; //定义一个常量字符串abcd，再将char指针变量sstring的值保存为该常量字符串的地址 char sstring[100] = "abcd"; //定义一个100项的char字符数组sstring，再将该数组的前五个字节赋值为0x41,0x42,0x43,0x44,0x00  常量字符串abcd保存在常量区，该内存区的控制属性默认为不可写。一旦企图写，操作系统的内存管理模块发现并弹出对话框报异常。  #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 正解！[/quote]恩，明白了，谢谢！

user: user-2

user: user-3
content: 引用 4 楼 zhao4zhong1 的回复:char *sstring = "abcd"; //定义一个常量字符串abcd，再将char指针变量sstring的值保存为该常量字符串的地址 char sstring[100] = "abcd"; //定义一个100项的char字符数组sstring，再将该数组的前五个字节赋值为0x41,0x42,0x43,0x44,0x00  常量字符串abcd保存在常量区，该内存区的控制属性默认为不可写。一旦企图写，操作系统的内存管理模块发现并弹出对话框报异常。  #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 正解！

user: user-4
content: char *sstring = "abcd";  这种方式得到的字符串常量，不能修改编辑

user: user-0
content: 引用 6 楼 user-5 的回复:特意上网找了找，给推荐个文章 http://blog.csdn.net/yahohi/article/details/7427724 非常感谢你推荐了一篇好文章！

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:char *sstring = "abcd"; //定义一个常量字符串abcd，再将char指针变量sstring的值保存为该常量字符串的地址 char sstring[100] = "abcd"; //定义一个100项的char字符数组sstring，再将该数组的前五个字节赋值为0x41,0x42,0x43,0x44,0x00  常量字符串abcd保存在常量区，该内存区的控制属性默认为不可写。一旦企图写，操作系统的内存管理模块发现并弹出对话框报异常。  #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 谢谢！ 恩，后来我自己也试了一下，有new方式声明的sstring就可以被重新赋值。常量区是不是栈区呢？new出来的是保存在堆区。

user: user-5
content: 特意上网找了找，给推荐个文章 http://blog.csdn.net/yahohi/article/details/7427724

user: user-5
content: 断点调试显示异常信息是访问冲突，就算把18行改为sstring[i]=letter也是一样的。 但是如果把初始化中的char* sstring="abcd"改为char sstring[]="abcd"就没有异常了。

user: user-3
content: char *sstring = "abcd"; //定义一个常量字符串abcd，再将char指针变量sstring的值保存为该常量字符串的地址 char sstring[100] = "abcd"; //定义一个100项的char字符数组sstring，再将该数组的前五个字节赋值为0x41,0x42,0x43,0x44,0x00  常量字符串abcd保存在常量区，该内存区的控制属性默认为不可写。一旦企图写，操作系统的内存管理模块发现并弹出对话框报异常。  #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:#include<stdio.h> #include<string.h> int main(void)  {       char sstring[100] = "abcd";     printf("string before : %s\n", sstring);     char letter = '*';     char* tmp = sstring;    int con = 0;    while (*tmp++ != '\0')    {        ++con;    }    char* pp = sstring;    for (int i = 0; i < con; i++)    {        //printf("%c\n", pp[i]);       pp[i] = letter;    }    printf("%d\n", con);    printf("string after : %s\n", sstring);     return 0;  }   你好，非常感谢你的回答！ 不过我想知道为什么sstring是字符型指针的时候无法对其赋值。

user: user-3
content: #include<stdio.h> #include<string.h> int main(void)  {       char sstring[100] = "abcd";     printf("string before : %s\n", sstring);     char letter = '*';     char* tmp = sstring;    int con = 0;    while (*tmp++ != '\0')    {        ++con;    }    char* pp = sstring;    for (int i = 0; i < con; i++)    {        //printf("%c\n", pp[i]);       pp[i] = letter;    }    printf("%d\n", con);    printf("string after : %s\n", sstring);     return 0;  }

user: user-3
content: #include <stdio.h> #include <string.h> #include <locale.h> char s[256]; char *p; int r,n,i; int main() {     setlocale(LC_ALL,"chs");     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //