一些C函数可以修改字符串值,而不必传递它的地址。 例如:如何修改字符串值而不通过char **作为参数?
char * s = "foo\0";
tobaa(s); /* Now foo is modified to something like "baa" */
printf("%s", s); /* baa */
我该怎么做?
一些C函数可以修改字符串值,而不必传递它的地址。 例如:如何修改字符串值而不通过char **作为参数?
char * s = "foo\0";
tobaa(s); /* Now foo is modified to something like "baa" */
printf("%s", s); /* baa */
我该怎么做?
简单:
void tobaa(char *s)
{
strcpy(s, "baa");
}
而且,额外的\0
性格是不必要的,它会自动添加。 此外,请确保您将可变缓冲区传递给tobaa
或调用UB。
如果我必须在函数内部分配内存,该怎么办? 例如 '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
首先要提的是,您的代码涉及未定义的行为;你不能修改字符串文字。
但回答你的问题,char *
已经是一个指针。具体来说,它是一个指向字符数组的指针。所以如果你将这个指针传递给一个函数,该函数可以修改底层字符。
您不需要在字符串文本末尾明确地放置'\ 0'。它会自动完成。并将'char * s'更改为'char s []' – Shahbaz 2012-03-31 14:04:18
@Shahbaz:感谢您的注意。这是C标准?所有的C编译器都这样做? – Jack 2012-03-31 15:59:34
是的,它是标准的 – Shahbaz 2012-03-31 16:47:18