Как назначить строку для char *pw в C++
Как назначить строку для char *pw в C++
лайк...
char *pw = некоторая строка
??
5 ответов
Для постоянной инициализации вы можете просто использовать
char *pw = "mypassword";
если строка хранится в переменной, и вам нужно сделать копию строки, вы можете использовать функцию strcpy()
char *pw = new char(strlen(myvariable) + 1);
strcpy(pw, myvariable);
// use of pw
delete [] pw; // do not forget to free allocated memory
Если вы просто хотите назначить строковый литерал pw
, вы можете сделать это как char *pw = "Hello world";
,
Если у вас есть C++ std::string
объект, значение которого вы хотите присвоить pw
, вы можете сделать это как char *pw = some_string.c_str()
, Тем не менее, значение, которое pw
указывает будет действителен только в течение срока службы some_string
,
Если вы имеете в виду std::string
, вы можете получить указатель на строку в стиле C, вызвав c_str
, Но указатель должен быть const
,
const char *pw = astr.c_str();
Если pw
указывает на ранее выделенный буфер, вместо этого вы можете скопировать содержимое строки в этот буфер:
astr.copy(pw, lengthOfBuffer);
Если вы начинаете со строкового литерала, это уже указатель:
const char *pw = "Hello, world".
Обратите внимание на const
еще раз - строковые литералы не должны быть изменены, так как они скомпилированы в вашей программе.
Но вы будете лучше проводить время, если вы используете std::string
везде:
std::string astr("Hello, world");
Кстати, вам нужно включить правильный заголовок:
#include <string>
Я думаю, что вы можете сделать это:
using namespace std;
string someString;
geline(cin,someString);
char *pw = strdup(someString.c_str());
Но подумайте о том, чтобы сделать это по-другому. Проверьте http://tiswww.case.edu/php/chet/readline/rltop.html (библиотека GNU Readline). Я не знаю подробностей об этом, просто слышал об этом. Другие могут иметь более подробные или другие советы для чтения паролей из стандартного ввода.
Если вы хотите использовать его только для одного вызова для чего-то, что вам не нужно копировать содержимое someString, вы можете использовать someString.c_str()
непосредственно, если это требуется как const char *
,
Вы должны использовать free
на pw
некоторое время спустя,
Строка должна быть заключена в двойные кавычки, такие как:
char * pStr = "stackru";
Он будет хранить этот строковый литерал в постоянной памяти программы. И в последующем модификация к нему может вызвать UB.