如何修改字符串值而不传递char **作为参数?

时间:2012-03-31 13:59:33

标签: c string

有些C函数可以修改字符串值,而不会传递它的地址。 例如:

char * s = "foo\0";
tobaa(s); /* Now foo is modified to something like "baa" */
printf("%s", s); /* baa */

我该怎么做?

2 个答案:

答案 0 :(得分:4)

首先要提到的是,您的代码涉及未定义的行为;你不能修改字符串文字。

但要回答您的问题,char *已经 指针。具体来说,它是一个指向字符数组的指针。因此,如果将此指针传递给函数,该函数可以修改基础字符。

答案 1 :(得分:4)

简单:

void tobaa(char *s)
{
    strcpy(s, "baa");
}

此外,额外的\0字符是不必要的,它会自动添加。 另外,请确保将可变缓冲区传递给tobaa或调用UB。