我正在尝试将'G'
替换为'R'
,但我收到了未处理的异常。
int main()
{
char *pszStr1 = "EFGH";
(++pszStr1)[1] = 'R';
printf("%s", pszStr1);
return 0;
}
答案 0 :(得分:6)
你的字符串位于只读区域。
相反,做
int main()
{
static char pszStr1arr[] = "EFGH";
char *pszStr1 = pszStr1arr;
(++pszStr1)[1] = 'R';
printf("%s", pszStr1);
return 0;
}
答案 1 :(得分:3)
int main()
{
char *pszStr1 = "EFGH";
(++pszStr1)[1] = 'R';
printf("%s", pszStr1);
return 0;
}
在此代码中,pszStr1
是一个字符串文字,必须将其视为const char *pszStr1 = "EFGH";
。您正在尝试修改只读内存空间。
答案 2 :(得分:1)
char *pszStr1 = "EFGH";
是字符串文字,但在这里就像你写的那样:const char* pszStr1 = "EFGH";
您正在尝试修改只读内存空间...
您只需将其更改为:
即可解决此问题char pszStr1[] = "EFGH";
答案 3 :(得分:0)
char * pszStr1 =“EFGH”;
保留在可执行文件的只读部分。编译器在内部分配字符串“EFGH”然后使pszStr1指向它。所以,你无法改变它。使用数组而不是char指针,如下所示:
char pszStr1[] = "EFGG";
答案 4 :(得分:0)
char *pszStr1 = "EFGH";
是常量,如果更改内容,则未定义。
如果要更改内容,则必须采用数组:
char arr[] = "EFGH";
你可以这样做:
arr[2] = 'R';
答案 5 :(得分:0)
字符串文字在现代C中是const,因此声明char *pszStr1 = "EFGH";
是错误的,它应该是const char *pszStr1 = "EFGH";
。在许多操作系统中,它们最终位于内存中标记为只读的部分,并且操作系统强制您无法写入它们。如果将字符串文字复制到堆栈(或堆)上的临时字符串,则程序可以正常工作。
int main()
{
char str[5];
char *pszStr1=str;
strcpy(pszStr1,"EFGH");
(++pszStr1)[1] = 'R';
printf("%s", pszStr1);
return 0;
}