2010-02-10 27 views
5

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

??

+1

char * pw = "alguna cadena"; ¿No es esto lo que estás esperando? – Jagannath

+0

si uso como char * pw = "alguna cadena"; estoy recibiendo una excepción. "corrupción de montón" – Anuya

+0

puede publicar el código completo? – Jagannath

Respuesta

6

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 
+2

Debería usar 'const char * pw' en literales. – Notinlist

3

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.

+0

Está garantizado para ser válido hasta que realice una operación de mutación en 'some_string'. – Bill

2

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> 
2

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.

+0

si uso como char * pw = "alguna cadena"; estoy recibiendo una excepción. "corrupción del montón" - karthik 4 secs ago edit [eliminar este comentario] – Anuya

+3

@Mac - tu código funciona debido a la compatibilidad con C pero es una buena práctica usar 'const char *' – Manuel

2

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,

+2

'strdup' es útil, pero ten cuidado con los problemas de portabilidad : http://stackoverflow.com/questions/482375/c-strdup-function – Manuel

Cuestiones relacionadas