Разница между char c [100] и char * c с помощью cin.getline ()

У меня есть несколько вопросов по 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');

Я знаю только одно, второе не работает 🙂

-1

Решение

Ваш второй фрагмент кода является синтаксической ошибкой. Как это будет работать

char *c = new char[100];
cin.getline(c,100,'\n');

Разница между ними заключается в том, что во втором случае память распределяется динамически. Это имеет два эффекта, во-первых, массив не уничтожается автоматически, в первом примере массив будет автоматически уничтожен при выходе из функции, в которой он был объявлен. Второй эффект заключается в том, что если вы не уничтожите массив с помощью delete[] у вас утечка памяти Достаточно утечек памяти, и ваша программа потерпит крах.

Выберите версию, которую вы хотите, основываясь на том, когда вы хотите, чтобы массив был уничтожен, автоматически в конце функции или когда вы так говорите, используя delete[], Конечно, на самом деле вы должны использовать std::string,

3

Другие решения

C ++ не позволяет вам принимать ввод непосредственно в символьном указателе, через cin или же getline, Если вы хотите получить входные данные в динамически размещенной строке, сначала получите входные данные в массиве статических символов и используйте strcpy() скопировать данные в указатель на символ.

Смотрите мой ответ здесь
GetLine (CIN, _string);

0

если вы используете

getchar()

или же

gets()

возвращаемое значение будет символом *.
иногда проблемы возникали из-за того, что буфер не был чистым.
так почистите его:

cin.ignore()
0

для одного при вызове c передается по ссылке, а во втором случае c передается как указатель.

Второй случай такой же как:

char c[100];
Char *p = &c;
cin.getline(p,100,'\n');
-1
По вопросам рекламы [email protected]