What is the difference between char s[] and char *s?Зачем возвращать заданную ошибку в C?
Я привел пример двух кодов на основе данной ссылки. Предположим getstring() функцию.
char *str = "GfG"; /* "GfG" is stored in read only part of shared segment */
/* str has auto storage duration,so stored on the stack
/* No problem: remains at address str after getString() returns*/
return str;
И
char str[] = "GfG"; /* "GfG" is stored in read only part of shared segment */
/* str has auto storage duration,so stored on the stack.
/* Problem: string may not be present after getSting() returns */
return str;
Поскольку оба имеют автоматическую продолжительность хранения и обе переменные, хранящиеся на сегмент стека.
Тогда почему возвращение ули работает первого один на, а не для второго?
Первый возвращает указатель на строковый литерал статического времени жизни, который не будет уничтожен, когда останется область 'getString()'. Однако во втором «GfG» 'на самом деле не является строковым литералом и не имеет статического времени жизни, это время жизни связано с областью, в которой оно было выделено. Таким образом, указатель, возвращаемый вторым, будет недействительным, и попытка прочитать его вызовет неопределенное поведение. – George
Если вы определяете 'str []' как 'static char', он не будет уничтожен при выходе из функции. –
проверить это http://stackoverflow.com/questions/9970295/life-time-of-string-literal-in-c – Karthick