2010-11-07 27 views
14

No soy un programador de C++, por lo que necesito ayuda con las matrices. Necesito asignar una matriz de caracteres a alguna estructura, p.Asignación de matriz C++ error: asignación de matriz no válida

struct myStructure { 
    char message[4096]; 
}; 

string myStr = "hello"; // I need to create {'h', 'e', 'l', 'l', 'o'} 

char hello[4096]; 
hello[4096] = 0; 
memcpy(hello, myStr.c_str(), myStr.size()); 

myStructure mStr; 
mStr.message = hello; 

consigo error: invalid array assignment

Por qué no funciona, si mStr.message y hello tienen el mismo tipo de datos?

+0

Tienes que usar la función strcpy o memcpy en lugar de mstr.message = hello. – Siddiqui

+0

La línea 'hello [4096] = 0;' es incorrecta. Esto es uno más allá del último elemento de la matriz. Solo elimina esta linea –

Respuesta

13

Como no se puede asignar a las matrices, no son valores-l modificables. Use strcpy:

#include <string> 

struct myStructure 
{ 
    char message[4096]; 
}; 

int main() 
{ 
    std::string myStr = "hello"; // I need to create {'h', 'e', 'l', 'l', 'o'} 
    myStructure mStr; 
    strcpy(mStr.message, myStr.c_str()); 
    return 0; 
} 

Y también está escribiendo el final de su matriz, como ya señaló Kedar.

+0

En realidad, las matrices 'mStr.message' y' hello' en el código de Alex ** son ** lvalues, porque las expresiones '& mStr.message' y' & hello' son válidas. (Consulte la sección 5.3.1, párrafo 3 en el estándar C++). – fredoverflow

+0

Sí, tiene razón, lo siento. Parece que debería haber dicho que myStr.message no es un * l-value * modificable. –

+1

@ Stuart: ¡Debes actualizar tu respuesta! –

3

La declaración char hello[4096]; asigna espacio de pila para 4096 caracteres, indexados de 0 a 4095. Por lo tanto, hello[4096] no es válido.

14

Why it doesn't work, if mStr.message and hello have the same data type?

Porque el estándar lo dice. Las matrices no se pueden asignar, solo se inicializan.

3

Necesita usar memcpy para copiar matrices.

Cuestiones relacionadas