我是C的初学者,我相对毫无头绪,所以我希望有人可以提供帮助。
我有一种方法,该方法取决于某个数字是什么。
char* getStr(int aNumber)
{
char *str= malloc(15);
if(!str)
return NULL;
if(aNumber == 0)
str = "this";
else if(aNumber== 1)
str = "that";
// other "else if" statements
else
str= "nope";
return str;
}
在另一种方法中,我有:
char *myString = getStr(number1);
printf("%s", myString);
char *myOtherString = getStr(number2)
printf("%s", myOtherString);
我的问题现在是迈托斯的连接与Mystring相同。在getTr()方法中使用strdup()而不是malloc()也具有相同的效果,同时又抛弃了两者,只是试图返回str而不会导致随机符号被打印出来(直径和问号)。
> <</p>如何更改gettr()方法以使输出字符串在方法的每个调用中都不同?还是我必须以某种方式在其他方法调用之后以某种方式释放分配给字符串的空间?
也许您想要的是:
char* getStr(int aNumber)
{
char *str= malloc(15);
if(!str)
return NULL;
if(aNumber == 0)
strcpy(str,"this");
else if(aNumber== 1)
strcpy(str, "that");
// other "else if" statements
else
strcpy(str, "nope");
return str;
}
不是吗?
c字符串不是基本类型。他们是字符的指针。
也许您的功能的评论版本会有所帮助。
char* getStr(int aNumber)
{
/* make str point to a new block of uninitialized memory */
char *str= malloc(15);
if(!str)
return NULL;
/* make str point to some other constant array, do not free original allocation */
if(aNumber == 0)
str = "this";
else if(aNumber== 1)
str = "that";
// other "else if" statements
else
str= "nope";
return reg;
}
您可以使用类似的东西:
#define STRLEN 15
char* getStr(int aNumber)
{
char *str= malloc(STRLEN);
if(!str)
return NULL;
if(aNumber == 0)
snprintf(str, STRLEN, "this");
else if(aNumber== 1)
str = snprintf(str, STRLEN, "that");
// other "else if" statements
else
snprintf(str, STRLEN, "nope");
return str;
}
我认为我是否应该简单地返回字面的地址。
char* getStr(int aNumber){
if(aNumber == 0)
return "this";
else if(aNumber == 1)
return "that";
return "nope";
}
转动const char*
,以强调无法更改返回值。
如果要更改返回的字符串,在这种情况下,您必须释放呼叫者必须复制strcpy
组才能使用malloc
保护的区域。
,但可能您不会更改字符串。