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.

questionAnswers(3)

yourAnswerToTheQuestion