У меня есть несколько вопросов по cin.getline (char * s, int num_char, char delim);
в чем разница между:
char c[100];
cin.getline(c,100,'\n');
а также
char *c = new char[100]; //this is the correct form I want to show you
cin.getline(c,100,'\n');
Я знаю только одно, второе не работает 🙂
Ваш второй фрагмент кода является синтаксической ошибкой. Как это будет работать
char *c = new char[100];
cin.getline(c,100,'\n');
Разница между ними заключается в том, что во втором случае память распределяется динамически. Это имеет два эффекта, во-первых, массив не уничтожается автоматически, в первом примере массив будет автоматически уничтожен при выходе из функции, в которой он был объявлен. Второй эффект заключается в том, что если вы не уничтожите массив с помощью delete[]
у вас утечка памяти Достаточно утечек памяти, и ваша программа потерпит крах.
Выберите версию, которую вы хотите, основываясь на том, когда вы хотите, чтобы массив был уничтожен, автоматически в конце функции или когда вы так говорите, используя delete[]
, Конечно, на самом деле вы должны использовать std::string
,
C ++ не позволяет вам принимать ввод непосредственно в символьном указателе, через cin
или же getline
, Если вы хотите получить входные данные в динамически размещенной строке, сначала получите входные данные в массиве статических символов и используйте strcpy()
скопировать данные в указатель на символ.
Смотрите мой ответ здесь
GetLine (CIN, _string);
если вы используете
getchar()
или же
gets()
возвращаемое значение будет символом *.
иногда проблемы возникали из-за того, что буфер не был чистым.
так почистите его:
cin.ignore()
для одного при вызове c передается по ссылке, а во втором случае c передается как указатель.
Второй случай такой же как:
char c[100];
Char *p = &c;
cin.getline(p,100,'\n');