Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.06.2010, 23:45

Zugriffsverletztung beim Konvertieren mit sprintf_s

Hey, ich sitze jetzt schon seit ein paar Stunden an diesem Problem und komm nicht weiter.

Ich bekomme beim konvertieren von folgendem Code eine Zugriffsverletztung

C-/C++-Quelltext

1
2
3
    char* ch_Buffer = ""; 
    int zahl = 5;
    sprintf_s(ch_Buffer,sizeof(ch_Buffer),"%d",zahl); //Konvertierung --> Hier findet die Zugriffsverletzung statt


Ich möchte dabei in ch_Buffer den Wert von der zahl hineinschreiben (ch_Buffer MUSS ein Pointer sein, da ich ihn später in dieser Form verwenden möchte)

Ich bin mir sicher, es ist nur ein banaler Fehler, aber ich kann ihn bei besten Willen nicht finden >.<

Liebe Grüße
Ombalat

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

20.06.2010, 23:50

C-/C++-Quelltext

1
2
3
char ch_Buffer[16] = {0}; 
int zahl = 5;
sprintf_s(ch_Buffer,sizeof(ch_Buffer),"%d",zahl); //Konvertierung --> Hier findet die Zugriffsverletzung statt
@D13_Dreinig

3

21.06.2010, 09:06

OMG ---> das funktioniert :D Danke =)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

21.06.2010, 10:00

Der Grund ist dir mittlerweile sicherlich auch klar, oder? Bist du denn an sprintf_s/C gebunden, weil wenn nicht würde ich eher zu den "ausfallsichereren" Varianten ala stringstream etc raten. Aber das nur so als Randbemerkung :)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

21.06.2010, 11:12

dein fehler war dass dein array die größe von 1 hatte(die nullterminierung) und du die größe des zeigers(auf 32bit systemen 4byte) übergeben hast.

für solche dinge nutz ich dieses template:

C-/C++-Quelltext

1
2
3
4
5
6
template<class T> inline std::string ToStr(T x)
{
    std::stringstream type;
    type << x;
    return type.str();
};
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

21.06.2010, 13:06

dein fehler war dass dein array die größe von 1 hatte(die nullterminierung)
Und wenn schon. Spätestens beim Schreiben durch sprintf_s würde es Probleme geben, weil der Zeiger auf ein Stringliteral zeigt!
@D13_Dreinig

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

21.06.2010, 13:14

wird für stringliterale kein speicher reserviert den man bearbeiten darf? schon ewig her, dass ich mich damit überhaupt beschäftigt hab. normal würde man auch nie auf die idee kommen das so zu machen^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

21.06.2010, 13:27

wird für stringliterale kein speicher reserviert den man bearbeiten darf? schon ewig her, dass ich mich damit überhaupt beschäftigt hab. normal würde man auch nie auf die idee kommen das so zu machen^^
Nein. Stringliterale sind rein konstante Daten.
@D13_Dreinig

9

21.06.2010, 15:06

Der Grund ist dir mittlerweile sicherlich auch klar, oder? Bist du denn an sprintf_s/C gebunden, weil wenn nicht würde ich eher zu den "ausfallsichereren" Varianten ala stringstream etc raten. Aber das nur so als Randbemerkung :)

Ich bin nicht an sprintf_s gebunden, mein Problem war nur, dass ich für die Funktion eine char* erwartet, und ich es mit static_cast nicht geschafft hab, die int - Variable umzuwandeln.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

21.06.2010, 15:16

das chararray von David_pb ist im grunde auch nur ein zeiger, mit dem unterschied, dass du den index-operator( [] ) drauf anwenden kannst.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige