cómo asignar una cadena a char * pw en C++cómo asignar una cadena a char * pw en C++
como ...
char * pw = alguna cadena
??
cómo asignar una cadena a char * pw en C++cómo asignar una cadena a char * pw en C++
como ...
char * pw = alguna cadena
??
Para la inicialización constante puede simplemente usar
char *pw = "mypassword";
si la cadena se almacena en una variable, y hay que hacer una copia de la cadena a continuación, puede utilizar función strcpy()
char *pw = new char(strlen(myvariable) + 1);
strcpy(pw, myvariable);
// use of pw
delete [] pw; // do not forget to free allocated memory
Debería usar 'const char * pw' en literales. – Notinlist
Si solo quiere asignar un literal de cadena al pw
, puede hacerlo como char *pw = "Hello world";
.
Si tiene un objeto C++ std::string
, cuyo valor desea asignar a pw
, puede hacerlo como char *pw = some_string.c_str()
. Sin embargo, el valor que apunta a pw
solo será válido durante el tiempo de vida de some_string
.
Está garantizado para ser válido hasta que realice una operación de mutación en 'some_string'. – Bill
Si se refiere a std::string
, puede obtener un puntero a una cadena de estilo C de ella, llamando al c_str
. Pero el puntero debe ser const
.
const char *pw = astr.c_str();
Si pw
apunta a un búfer que ha asignado previamente, en su lugar puede ser que desee copiar el contenido de una cadena en ese búfer:
astr.copy(pw, lengthOfBuffer);
Si vas a empezar con una cadena literal , ya es un puntero:
const char *pw = "Hello, world".
Aviso del nuevo const
- literales de cadena no deben modificarse, ya que se recopilan en su programa.
Pero vas a tener un mejor momento si se utiliza generalmente std::string
todas partes:
std::string astr("Hello, world");
Por cierto, es necesario incluir la cabecera de la derecha:
#include <string>
cadena debe ir entre comillas dobles como:
char * pStr = "stackoverflow";
Almacenará este literal de cadena en la memoria de solo lectura del programa. Y más adelante modificarlo puede causar UB.
creo que es posible que desee hacer esto:
using namespace std;
string someString;
geline(cin,someString);
char *pw = strdup(someString.c_str());
pero tenga en cuenta haciendo camino itanother. Consulte http://tiswww.case.edu/php/chet/readline/rltop.html (biblioteca GNU Readline). No sé detalles al respecto, solo lo escuché. Otros pueden tener consejos más detallados u otros para leer las contraseñas de la entrada estándar.
Si solo desea usarlo para una sola llamada para algo, no necesita copiar el contenido de alguna cadena, puede usar someString.c_str()
directamente si se requiere como const char *
.
usted tiene que utilizar free
en pw
algún tiempo después,
'strdup' es útil, pero ten cuidado con los problemas de portabilidad : http://stackoverflow.com/questions/482375/c-strdup-function – Manuel
char * pw = "alguna cadena"; ¿No es esto lo que estás esperando? – Jagannath
si uso como char * pw = "alguna cadena"; estoy recibiendo una excepción. "corrupción de montón" – Anuya
puede publicar el código completo? – Jagannath