Problem mit char*

MFC openGL

Erfahrenes Mitglied
Code:
	  char * res = new char[getsizea()+1];
	  strcpy(res, (char*)backuparray[0]);
	  for(int i = 1; i < getsizea(); i++)
	  {
		 strcat( res, (char*)backuparray[i] );
		 strcat( res, (char*)' ');
	  }

Hallo, der oben geschiebene Code macht mich fast irre, ich finde den Fehler nicht.
Also ich will das ich die Arrayelemente von backuparray[] in ein char* bekomme.

Der Datentyp von backuparray[] ist int, double, float oder char, das muss variabel bleiben.
Ich habe das gleiche mal mit std::string probiert, dann bekomme ich am Ende des Programmablaufs aber einen Speicherzugriffsfehler.

Der Code für std::string sah so aus :

Code:
	  std::string buffer;
	  char * res = new char[getsizea()+1];
	  //geht für jedes element der liste durch
	  buffer = (char*)backuparray[0];
	  for(int i = 1; i < getsizea(); i++)
	{
   buffer = buffer + (char*)backuparray[i];
   buffer = buffer + " ";
	  }
	  const char* re = buffer.c_str();
	  strcpy(res, re);
	  return res;

Was mache ich falsch ?
 
Hallo, der oben geschiebene Code macht mich fast irre, ich finde den Fehler nicht.
Also ich will das ich die Arrayelemente von backuparray[] in ein char* bekomme.

Der Datentyp von backuparray[] ist int, double, float oder char, das muss variabel bleiben.
strcpy(res, (char*)backuparray[0]);

Seit wann haben denn int, float, oder char die gleiche Größe?
Sowas geht garantiert in die Hose...

Wenn du C++ verwenden kannst kannst du ja mit sstreams arbeiten:

Code:
#include <iostream>
#include <sstream>

using namespace std;

int main(){
        ostringstream os;
        float array[] = {1.2,2.3,3.5,4.21,5.0};
        for(int i = 0; i < 5; i++)
                os << array[i] << ' ';
        cout << os.str().c_str() << endl;
}
http://www.cplusplus.com/ref/iostream/ostringstream/

Gruß

RedWing
 
Hey, das klingt super... werde das direkt mal testen...

So, habs mal versucht zu testen, musste aber feststellen das mein Borland Compiler die sstream nicht kennt, hab mal versucht die sstream von MSVC++ zu nehmen, aber das klappt nicht.

Hast du einen Link wo man die sstream herbekommt ? Denn dein Link hat mir da leider keinen Download gezeigt...

Danke schonmal
 
Zuletzt bearbeitet:
Leider bringt mich dein Vorschlag mit fcvt() nicht weiter, da ich entweder einen double, float, int oder char bekomme, den ich da reinjagen können muss und er mir dann ein char oder char* zurückgibt.

Kann man das nicht evtl mit dem filestream machen ? Das man einfach den ganzen Kram per >> operator in ein File schreibt, und das File dann wieder ausließt, dann müsste man doch auch ein char für alle oben genannten Datentypen bekommen, oder ?
 
Ja, wäre schön, aber leider weiss ich vorher nicht WAS für ein Datentyp kommt... das muss variable bleiben...


Und bei sprintf muss man ja vorher sagen was da ankommt.
 
Wenn das backuparray gefüllt wird weißt du doch, ob du int, float, etc reinschreibst.

Was spricht also dagegen, ein zweites Array 'mitlaufen' zu lassen, in welchen du
Information über den Typ der Variablen speicherst, z.B. backuparraytypes[]...

Beim rauslesen mußt du dann halt mit deinem Index immer in beide Array indzieren,
aber du kannst gezielt reagieren...

BadMourning
 
Es spricht dagegen das ich alles mit Template machen muss, da ich den mir übergebenen Datentyp nicht kenne.

Und ich fülle das Array nicht, ich bekomme eins, zack, und ich weiss nicht was das für eins ist, und wenn ich eine abfrage machen würde, ist es .... int, float, double, char.... dann brauche ich kein template mehr, dann ist das für den *****.

Also muss ich eine Lösung haben die das Problem umgeht.
 
Zurück