替换字符串中的字符

时间:2013-08-12 08:49:14

标签: c string

我正在尝试将'G'替换为'R',但我收到了未处理的异常。

int main()
{
    char *pszStr1 = "EFGH";

    (++pszStr1)[1] = 'R';

    printf("%s", pszStr1);
    return 0;
}

6 个答案:

答案 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;
}