在C ++中修改char *

时间:2015-01-12 21:09:23

标签: c++

我正在尝试用C ++修改c字符串。

void modify(char* s)
{
    s[0] = 'a';
}

如果我这样做,将会有一些未定义的行为,无法运行。

假设s [0]有效。我知道char * s是不可变的。我是否有可能在适当的位置修改s [0],这意味着无需创建新字符串。对原始字符串进行修改。

1 个答案:

答案 0 :(得分:1)

我认为你可能会误解你在网上看到的其他一些答案。 修改字符串常量只是未定义的行为,而不是任何char*

只要将strdup常量字符串转换为非常量字符串,就可以对其进行任何更改,因为它现在位于可变的内存区域中。

#include <stdio.h>
#include <string.h>

void modString(char* changeMe) {
    changeMe[0] = 'g';
}
int main(){
    char* foo = strdup("food");
    puts(foo);
    modString(foo);
    puts(foo);
    free(foo);
}