我正在尝试创建一个将字符串大写的过程,但我收到垃圾值和来自 gcc 的警告,提示我正在返回局部变量的地址。来自Python,我对这个问题感到困惑。 (不想在中使用东西<string.h>
)
2
3
4char* strcaps(const char *strlower)
5{
6 int len = 0;
7 while (*strlower != '\0'){
8 len++;
9 strlower++;
10 }
11 char newStr[len + 1];
12 int i;
13 for (i = 0; i < len; i++)
14 newStr[i] = strlower[i] - 32;
newStr[len + 1] = '\0'; //EDIT, just put this in.
15 return newStr;
16}
17
18int main(void)
19{
20
21
22
23 printf("I expect capitalized version of edgar, I got %s\n", strcaps("edgar"));
24
25
26 return 0;
27}
我猜我可以创建一个全局字符串,然后将其可变,但我宁愿将所有内容保留在函数 strcaps 中......这是我应该使用 malloc 的情况吗?
Thanks
编辑:刚刚意识到我从来没有放过'\0
' 在新字符串的末尾,尽管我不确定这是否相关。
在C中你有两个选择。
1)您可以向函数传递一个指向字符串的指针,函数将修改它并返回 void
在这种情况下,您可以只使用原始字符串
2)你可以传递你的函数const char*
并返回char *
,但是你需要在函数内部进行 malloc
如果您在函数内部执行 malloc,则可以在您调用的程序的末尾使用该字符串(打印它或执行任何您想要的操作)free
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)