Debug Assertion Failed (L"Buffer to small" && 0)
-
Hallo zusammen,
in der Schule sind wir gerade dabei C++ zu lernen. Ich auch recht gut zurecht damit.
Wir sollten ein Programm schreiben um eine Liste mit Namen und Noten zu schreiben. Die Ein- und Ausgabe funktioniert auch. Jetzt sollten wir das Programm erweitern, damit die Ausgabe in alphabetischer Reihenfolge geschieht. Aber ich bekomme immer eine Fehlermeldung mit der ich nichts anfangen kann:
Debug Assertion Failed
(L"Buffer to small" && 0)Hier mal mein Code:
#include "stdafx.h" #include <iostream> #include <math.h> #include <stdio.h> #include <conio.h> #include <string.h> #include <cstring> #include <string> typedef struct { char name[21]; int d[1]; int hps[1]; int dvm[1]; }datenbank; using namespace std; int main (void) { int i = 0; char ende = 'n'; datenbank daten [12]; while ((i != 10) && (ende != 'J')) { printf ("Bitte geben Sie den Namen ein: "); cin >> daten[i].name; //scanf_s ("%s", daten[i].name); fflush (stdin); printf_s ("Bitte geben Sie die Note in Deutsch ein: "); scanf_s ("%i", daten[i].d); fflush (stdin); printf ("Bitte geben Sie die Note in HPS ein: "); scanf_s ("%i", daten[i].hps); fflush (stdin); printf ("Bitte geben Sie die Note in DVM ein: "); scanf_s ("%i", daten[i].dvm); fflush (stdin); printf ("Beenden j/n? : "); ende = toupper (getchar ()); fflush (stdin); i++; } for (int j=0; j<11; j++) { for (int k=0; k<2; k++) { if (daten[j].name[k]>daten[j+1].name[k]) { char temp[22]; strcpy_s (temp, daten[j].name); strcpy_s (daten[j].name, daten[j+1].name); strcpy_s (daten[j+1].name, temp); //int temp2=0; //temp2=daten[j].d[0]; //daten[j].d[0]=daten[j+1].d[0]; //daten[j+1].d[0]=temp2; } j++; } } for (int m=0; m<i; m++) { printf ("%s %i %i %i\n", daten[m].name, daten[m].d[0], daten[m].hps[0], daten[m].dvm[0]); } _getch(); }In erster Linie geht es mir darum wie ich die Namen sortieren kann. Ich weiß auch das die Noten nicht mit getauscht werden, dass schaff ich dann schon.
Und warum kann ich in Zeile 29 nicht mit scanf_s arbeiten, sondern muss cin benutzen?
Ach ja ich benutze MS Visual Studio 2008.mfg marv87
-
marv87 schrieb:
in der Schule sind wir gerade dabei C++ zu lernen. Ich auch recht gut zurecht damit.
Du meinst wohl C. Abgesehen von
using namespace std;und ein paar Headerdateien, die du eh nicht brauchst, hast du ein C-Programm.Darfst du nicht moderne C++-Mittel verwenden? Dann wäre sortieren nämlich trivial. Stringmanipulation und Speicherverwaltung übrigens auch, das gesamte Gefrickel bist du auf einen Schlag los.
std::vector<std::string> namen; namen.push_back("Hans"); namen.push_back("Fritz"); namen.push_back("Sepp"); std::sort(namen.begin(), namen.end());Und noch so nebenbei:
fflush(stdin)führt zu undefiniertem Programmverhalten. Zusammen mit deinen Puffern mit willkürlicher Grösse ist die Wahrscheinlichkeit sehr hoch, dass das Programm nicht stabil läuft.
-
Also mein Lehrer sagt mir immer wieder ich soll fflush benutzen, auf die Fage hin warum kann er mir nicht zu meiner Zufriedenheit antworten.
Er meint auch wir lernen C++, aber im Prinzip hast du ja schon erkannt das wir mehr C als C++ machen.
Ich kopiere halt einfach die Headerdateien/Programmkopf von einem vorherigen Programm.