Problem mit Visual C++ Express

blizZar

Mitglied
Hi @,

In der Schule benutzen wir Microsoft Visual C++ Autoren Edition.
Leider habe ich die zu Hause nicht und nutze daher Microsoft Visual C++ Express 2005.
Mein Problem ist nun, dass er anscheinend einige Funktionen als "veraltet" betrachtet und daher muss ich anscheinend anstatt "scanf" -> "scanf_s" schreiben oder "strcpy" -> "strcpy_s". Ich weis nicht ob das richtig ist da mein Programm unter der Express 2005 version nicht läuft. Vielen Dank schonmal im vorraus.
C++:
// train.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include <stdio.h>
#include <string.h>

void durchschnitt(int pkt[], int fa)
{
 
    int summe = 0, i;
    double d_schn;
    for(i = 0; i<=fa; i++)
    {
        summe = summe + pkt[i];
    }
    d_schn=summe/fa;

    printf("%lf", d_schn);
    getchar();

    
}

void main()
{
    char text[30], name[20];
    
    int faecher, pkte[15], i;
    strcpy_s(text, "Zeugnispunktzahl fuer");
    
    printf("Geben Sie den Namen des/der Schueler/in ein: ");
    gets_s(name);
    
    printf("Geben Sie die Anzahl der Faecher ein: ");
    fflush(stdin);
    scanf_s("%i", &faecher);
    printf("%s %s\n\n\n", text, name);

    for(i = 0; i<=faecher-1; i++)
    {
        printf("Geben Sie die Note fuer das %i. Fach ein: ", i+1);
        fflush(stdin);
        scanf_s("%i", &pkte[i]);
    }
    durchschnitt(pkte, faecher);

}
 
Zuletzt bearbeitet:

deepthroat

Erfahrenes Mitglied
Hi.

Das es als veraltet eingestuft ist, heißt ja nicht das du es nicht mehr benutzen kannst. Man kann die Warnmeldung auch getrost einfach abschalten - es macht ja wenig Sinn wenn du dein Programm immer in 2 Versionen schreibst.
C++:
#pragma warning( disable : 4996 )

Die sichereren, neuen Funktionen sind etwas anders zu benutzen als die alten Funktionen.

strcpy wird zu strcpy_s - allerdings ändert sich natürlich der Aufruf, denn so einfach geht es nicht.
C++:
char dest[5];

// unsicher, da über das Ende von dest hinausgeschrieben wird:
strcpy(dest, "Hallo Welt");

// sicher, da die Grenze überprüft wird, es wird ein Fehler angezeigt
strcpy_s(dest, sizeof (dest), "Hallo Welt");

Wie die Funktionen zu benutzen sind, kannst du ganz genau im MSDN nachlesen.

Gruß