Używaj wielkich liter i zwracaj zmienną lokalną
Próbuję zrobić procedurę, która będzie wielką literą ciąg, ale otrzymuję wartości śmieci i ostrzeżenie z gcc, że zwracam adres zmiennej lokalnej. Pochodzę z Pythona, jestem zdezorientowany tym problemem. (Nie chcę używać rzeczy w<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}
Zgaduję, że mogę utworzyć łańcuch globalny, a następnie zmienić to, ale wolałbym zachować wszystko wewnątrz funkcji strcaps ... czy to przypadek, gdy powinienem użyć malloc?
Dzięki
EDYCJA: Właśnie zrozumiałem, że nigdy nie umieściłem'\0
'na końcu nowego ciągu, chociaż nie jestem pewien, czy jest to powiązane.