我正在尝试用C ++修改c字符串。
void modify(char* s)
{
s[0] = 'a';
}
如果我这样做,将会有一些未定义的行为,无法运行。
假设s [0]有效。我知道char * s是不可变的。我是否有可能在适当的位置修改s [0],这意味着无需创建新字符串。对原始字符串进行修改。
答案 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);
}