Ich stehe einige Probleme mit Code für meine Schule. Das Problem ist, dass ich ein char Zeiger „contenido“ wie folgt benannt:Wie char * in C++ - Klasse zu initialisieren? (sizeof() gibt immer 8)
class Archivo {
public:
Archivo(const char *filename, int banderas);
Archivo(const char *filename, int banderas, mode_t modo);
~Archivo();
size_t lee(size_t nbytes);
size_t escribe(const void *buffer, size_t nbytes);
char *get_contenido();
void cerrar();
protected:
string nombreArchivo;
int fd;
//Problematic char pointer
char *contenido;
};
Der Code soll eine Klasse Umsetzung der c-Funktionen read()
, write()
und open()
, die spezifische Methode sein, wo ich muss eingestellt eine neue Größe für meinen char-Pointer ist size_t lee(size_t nbytes);
, die ich wie folgt umgesetzt:
size_t Archivo::lee(size_t nbytes) {
contenido = new char[nbytes];
cout << "contenido: " << sizeof(contenido) << endl;
nbytes = read(fd, contenido, sizeof(contenido));
return nbytes;
}
in diesem Verfahren soll ich eine neue Größe für „contenido“ erhalten, dass in diesem Fall auch funktioniert es als meine Puffer für die read() aber leider spielt es keine Rolle, welchen Wert ich immer benutze ns "8" im Ruf von sizeof(contenido)
. Ich habe versucht, malloc()
im Konstruktor zu verwenden, malloc()
und dann verwendend, und wie Sie mit new char[size_t]
sehen können, aber in jedem einzelnen Fall erhalte ich das gleiche Ergebnis von "8". Ich recherchierte darüber und in den meisten Fällen wurde vorgeschlagen, std :: vector zu verwenden, aber in diesem speziellen Fall ist es notwendig, char * aufgrund der Anfrage meines Professors zu verwenden. Ich hoffe du kannst mir helfen und danke im voraus.
Sie sagen, C++ in Ihrem Titel, so wenden Sie sich bitte C-Tag entfernen. – jdarthenay
Sizeof tut, was es tun sollte: Rückgabe der Zeigergröße, nicht der Datengröße. Für die Datengröße haben Sie Ihre eigene Variable 'nbytes'. – deviantfan
'contenido' ist ein Zeiger und' sizeof (contenido) 'gibt immer Zeiger Größe. – haccks