Is it Real Geschrieben 4. Januar 2008 Geschrieben 4. Januar 2008 Hallo Bin mit meinem Latein am Ende, da ich nicht weiß, was zur Hölle ich hier auch immer falsch gemacht habe. Nach der Ausgabe des Systemaufrufs (yeah, es klappt ) kommt die Ausgabe: "Speicherzugriffsfehler". Hmpf. Hier der Code: #include<iostream> #include<string> using namespace std; int main(int argc, char *argv[]) { char infoModel[23]; strcpy(infoModel, "cat /proc/ide/"); strcat(infoModel, argv[1]); strcat(infoModel, "/model"); system(infoModel); } Ausgegeben wird, wie schon erwähnt: TOSHIBA MK1517GAP Speicherzugriffsfehler Ich bedanke mich wie immer schon im Voraus für eure Antworten. Gruss Is it Real Zitieren
Is it Real Geschrieben 4. Januar 2008 Autor Geschrieben 4. Januar 2008 GNAAA! Erschlagt mich jetzt bitte nicht, aber ich hatte mich einfach verzählt -.- Das Array muss keine 23 sondern 24 Felder haben - do'h! *verkriecht sich in ein Loch und hofft, dass es keiner mitbekommen hat* Zitieren
d.uNd.eE Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 lol wir brauchen n "Ich hab n peinlichen Fehler gemacht"-Thread^^ Zitieren
Guybrush Threepwood Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 Das ist kein peinlicher Fehler sondern einer der (wenn nicht sogar der) Hauptgründe für Sicherheitslücken in Anwendungen. @Is it Real Was machst du denn wenn jemand der Anwedung einen längeren Wert übergibt? Zitieren
Is it Real Geschrieben 11. Januar 2008 Autor Geschrieben 11. Januar 2008 Gute Frage... Öhm, ja, Abfrage einbauen und Fehler ausgeben lassen? Das wurde eh fallen gelassen. Ich habs als Shellscript gelöst, ist einfach angenehmer. Dafür muss ich jetzt die Ausgabe eines anderen Programms auswerten, aber da finde ich noch einen Weg (muss ne Zahl suchen, die immer nach dem gleichen String steht aber dafür unterschiedlich lang sein kann - dich dachte mit ner schleife und isdigit - wird schon klappen, aber momentan hab ich den Kopf nur noch voll mit Funktionen und Code und und und... Nah, ich mach ne Codingpause und dann geht es frischen Mutes weiter). Am Ende steht dann ein "Script", dass alle an einem System angeschlossene Festplatten auf Fehler überprüft und, falls keine gefunden wurden, sicher formatiert. Hoffe ich zumindest... Danke für eure Antworten und besonderen Dank an Guybrush, ich fühl mich nur noch halb so dämlich :bimei Zitieren
Guybrush Threepwood Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 Gute Frage... Öhm, ja, Abfrage einbauen und Fehler ausgeben lassen? genau Oder gleich std::string verwenden dann kann sowas nicht mehr passieren. Zitieren
Is it Real Geschrieben 12. Januar 2008 Autor Geschrieben 12. Januar 2008 Jah, aber das war in dem Fall und nach meinem Kenntnisstand nicht möglich, da system("") einen const char* will.... Zitieren
d.uNd.eE Geschrieben 13. Januar 2008 Geschrieben 13. Januar 2008 @Guybrush Threepwood Noch jemand, der sich mit B/O's beschäfigt hat^^ Zitieren
TDM Geschrieben 14. Januar 2008 Geschrieben 14. Januar 2008 Jah, aber das war in dem Fall und nach meinem Kenntnisstand nicht möglich, da system("") einen const char* will.... Was hast du gegen std::string::c_str()? Zitieren
Is it Real Geschrieben 14. Januar 2008 Autor Geschrieben 14. Januar 2008 Also bisher nichts. Kannte ich garnicht, danke für den Hinweis! Werd gleich mal schauen was das ist und was man alles damit anstellen kann Zitieren
d.uNd.eE Geschrieben 16. Januar 2008 Geschrieben 16. Januar 2008 c_str liefert einen pointer von typ char (char*) auf den std::string, beziehungweise auf dessen erstes Zeichen. da sowohl char als auch string(on diesem Falle) nullterminiert sind wird dann ein string als char* behandelt Zitieren
Guybrush Threepwood Geschrieben 16. Januar 2008 Geschrieben 16. Januar 2008 nein, es liefert einen const char* weil du nur lesend darauf zugreifen darfst. Sobald du da irgendwie drüber schreiben solltest läufst du Gefahr dein string Object zu zerstören oder Speicherlecks zu verursachen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.