Я знаю, что это не так:Возвращает указатель на литеральный (или постоянный) массив символов (строка)?
char* getSomething() {
char szLocal[5];
/* put something in the char array somehow */
return szLocal;
}
... потому что szLocal может быть уничтожен через некоторое время после завершения функции.
Но это нормально?
char* getSomethingElse() {
return "something else";
}
См. [C Строковые литералы: куда они идут?] (Http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go). –
В первом примере szLocal уничтожается не «когда-то после», а точно в тот момент, когда функция возвращается, поэтому возвращаемый указатель уже недействителен. Правда, данные, на которые он указывает, будут оставаться неизменными для «некоторого времени», но фрейм стека функции уже освобожден, и память становится доступной для использования всеми, кто должен создать некоторые локальные переменные или вызвать другую функцию. –