如何去掉一个字符串常量的常量属性
- 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)来转型,但常量本身改不掉的