我正在尝试替换'G'
,'R'
但我遇到了未处理的异常。
int main()
{
char *pszStr1 = "EFGH";
(++pszStr1)[1] = 'R';
printf("%s", pszStr1);
return 0;
}
您的字符串位于只读区域。
相反,做
int main()
{
static char pszStr1arr[] = "EFGH";
char *pszStr1 = pszStr1arr;
(++pszStr1)[1] = 'R';
printf("%s", pszStr1);
return 0;
}
int main()
{
char *pszStr1 = "EFGH";
(++pszStr1)[1] = 'R';
printf("%s", pszStr1);
return 0;
}
在此代码pszStr1
中是一个字符串文字,必须将其视为const char *pszStr1 = "EFGH";
. 您正在尝试修改只读内存空间。
char *pszStr1 = "EFGH";
是一个字符串文字,但在这里就像你写的:const char* pszStr1 = "EFGH";
您正在尝试修改只读内存空间...
您只需将其更改为即可解决它:
char pszStr1[] = "EFGH";
字符串文字在现代 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;
}
字符 *pszStr1 = "EFGH";
保存在可执行文件的只读部分。编译器在内部分配字符串“EFGH”,然后使 pszStr1 指向它。所以,你不能改变它。使用数组而不是 char 指针,如下所示:
char pszStr1[] = "EFGG";
char *pszStr1 = "EFGH";
是一个常数,如果你改变内容,它是未定义的。
如果要更改内容,则必须取一个数组:
char arr[] = "EFGH";
你可以这样做:
arr[2] = 'R';