Я понимаю, что проблема с приведенным ниже кодом заключается в том, что массив символов, в котором хранится ввод, находится в локальной функции. Когда указатель на этот массив символов передается основной функции, этот массив символов должен быть удален из стека.
Однако, когда я пытаюсь напечатать строку, она печатается, несмотря на предупреждения компилятора. Но если я попытаюсь поместить таймер между вызовом функции и оператором печати, строка окажется пустой. Почему это? Является ли «сборка мусора» медленнее, чем оператор печати?
Вывод без сна:
"Строка [строка]"
Выход со сном:
"Строка"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define MAX 20
char* get_user_input();
int main (){
char *choice;
choice = get_user_input();
//sleep(1);
//Add sleep and it won't print
printf("String: %s\n", choice);
}
char* get_user_input( ) {
char inbuffer[MAX];
char *pos;
printf("Enter string>");
fgets (inbuffer, MAX, stdin);
pos = strchr( inbuffer, '\n' );
if ( pos != NULL ){
*pos = '\0';
}
return inbuffer;
}
sleep
перезапишет ваш стек и испортит строку. (Однако это не объясняет, почемуprintf
оставляет его нетронутым.) - person M Oehm   schedule 07.03.2014