Veröffentlicht 4. Januar 200817 j 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
4. Januar 200817 j 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*
11. Januar 200817 j 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?
11. Januar 200817 j 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
11. Januar 200817 j Gute Frage... Öhm, ja, Abfrage einbauen und Fehler ausgeben lassen? genau Oder gleich std::string verwenden dann kann sowas nicht mehr passieren.
12. Januar 200817 j Jah, aber das war in dem Fall und nach meinem Kenntnisstand nicht möglich, da system("") einen const char* will....
14. Januar 200817 j 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()?
14. Januar 200817 j 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
16. Januar 200817 j 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
16. Januar 200817 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.