读书人

怎么去掉一个字符串常量的常量属性

发布时间: 2012-03-21 13:33:15 作者: rapoo

如何去掉一个字符串常量的常量属性

C/C++ code
void swap(char *a, char *b){     char temp = *a;    *a = *b;    *b = temp;}void main(){    char *s = "123";    swap(&s[0],&s[1]);    printf("%s\n",s);}


用gcc4.4.3编译运行会出现segment fault错误,把代码做如下修改运行正确
C/C++ code
void main(){    char *s = malloc(4);    strcpy(s,"123")    swap(&s[0],&s[1]);    printf("%s\n",s);}


应该是编译器把"123"设置了常量属性导致无法修改,想问有没有办法让"123"去掉常量属性直接赋给s。试过char *s = (char *)"123";没用。


[解决办法]
#pragma comment(linker,"/SECTION:.rdata,RW")
[解决办法]
本来这样的规定是出于安全考虑,为什么要破坏呢,要改变就用malloc或者 char []吧
[解决办法]
char *s = "123";
字符串“123”是常量字符串,位于静态存储区,它在程序声明期内恒定不变。
char *s = malloc(4);
strcpy(s,"123")
swap(&s[0],&s[1]);
这是先在堆里面申请内存,我觉得这样可以啊。楼主这样挺好啊。

要不改为:volatile char *s = "123";试试
[解决办法]
常量是不可改的,强制修改的结果是不可预料的,可以用const_cast<T>(arg)来转型,但常量本身改不掉的

读书人网 >C语言

热点推荐