有些C函数可以修改字符串值,而不会传递它的地址。 例如:
char * s = "foo\0";
tobaa(s); /* Now foo is modified to something like "baa" */
printf("%s", s); /* baa */
我该怎么做?
答案 0 :(得分:4)
首先要提到的是,您的代码涉及未定义的行为;你不能修改字符串文字。
但要回答您的问题,char *
已经 指针。具体来说,它是一个指向字符数组的指针。因此,如果将此指针传递给函数,该函数可以修改基础字符。
答案 1 :(得分:4)
简单:
void tobaa(char *s)
{
strcpy(s, "baa");
}
此外,额外的\0
字符是不必要的,它会自动添加。
另外,请确保将可变缓冲区传递给tobaa
或调用UB。