2012-03-31 18 views
0

一些C函数可以修改字符串值,而不必传递它的地址。 例如:如何修改字符串值而不通过char **作为参数?

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

我该怎么做?

+2

您不需要在字符串文本末尾明确地放置'\ 0'。它会自动完成。并将'char * s'更改为'char s []' – Shahbaz 2012-03-31 14:04:18

+0

@Shahbaz:感谢您的注意。这是C标准?所有的C编译器都这样做? – Jack 2012-03-31 15:59:34

+0

是的,它是标准的 – Shahbaz 2012-03-31 16:47:18

回答

4

简单:

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

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

+0

如果我必须在函数内部分配内存,该怎么办? 例如 'string str = createFileName(fileNumber); s =(char *)malloc(sizeof(char)*(str.length()+ 1)); strcpy(s,str.c_str());' 虽然在主'char * s = NULL;' – syfantid 2015-05-23 09:46:27

4

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

但回答你的问题,char *已经一个指针。具体来说,它是一个指向字符数组的指针。所以如果你将这个指针传递给一个函数,该函数可以修改底层字符。

相关问题