sprintf frage



  • ich habe folgenden code:

    sprintf(anz, "%hd von %hd %s %s",zaehler,anzahl,nachricht,name);
    

    und der printf von anz sieht so aus

    1 von 4 test

    wobei
    1 die zähler variable ist
    4 die anzahl variable ist und
    test die nachricht variable ist

    zähler und anzahl sind short
    und nachricht und name sind char

    warum wird die variable name nicht ausgegeben???

    dieses problem regt mich gewaltig auf

    kann mir dabei irgendjemand helfen

    vielen dank im voraus
    C Kid



  • Wenn nachrichten und name char sind, dann kannst du nicht %s benutzen, weil %s ein string erwartet und nicht ein char. Für chars gibt es %c.

    Ein anderer Grund kann sein, dass du keinen ausreichenden Platz für anz hat. Wie hast du anz deklariert?



  • Poste doch mal bitte den Code, in welchem du die Variablen belegst ... denn dein sprintf-Konstrukt sieht auf den ersten Blcik so aus, als ob es funktionieren müsste (vorrausgesetzt, dass die chars beides Zeiger auf Strings sind).



  • short anzahl,zaehler,schutz;
    char nachricht [101],name [101],buffer [201],anz [101];

    des sind meine deklarationen

    danke für die hilfe



  • und belegen tu ich die variablen so

    printf("\nNachricht: ");
    fgets(nachricht,100,stdin);
    
    printf("\nName: ");
    scanf("%100s",name);
    
    printf("\nAnzahl: ");
    scanf("%hd",&anzahl);
    
    und der zähler wird in der for schleife belegt
    
    for (zaehler = 1;zaehler<=anzahl;zaehler++)
    

    ich hoffe ihr könnt mir helfen
    C Kid



  • Wenn du sowas machen willst:

    sprintf(ziel, "%s", name);
    

    dann muss der Inhalt von name mit einem '\0' abgeschlossen werden. Sonst erkennt die Funktion nicht das Ende des Strings.

    Lies name mit fgets() ein, dass setzt '\0' automatisch.



  • also ich bin Brain11

    mit dem net send programm welches mittlerweile dank euerer hilfe wunderbar läuft aber jetzt wollte ich es halt noch erweitern damit in der nachricht noch angezeigt wird wieviele von wievielen nachrichten es noch sind

    ich geb euch einfach mal den kompletten code

    dann habt ihr alles so vor euch wie ich es aktuell habe und könnt mir effektiever helfen

    /*------------------------------------------------------------------------------
    
    Autor:           XXX
    E-Mail:          XXX
    Sprache:         ANSI C
    Datum:           2005-01-13
    Letzte Änderung: 2005-01-14
    Version:         1.8
    Zweck:           NetSend Befehl versenden
    
    ------------------------------------------------------------------------------*/
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void main(void)
    
    {
    
    short anzahl,zaehler,schutz;
    char nachricht [101],name [101],buffer [203];
    
    system("cls");
    
    printf("\n\n               NetSpam 1.8 \n\n"
               "   programmed by XXX          \n"
               "==========================================\n\n");
    
    printf("\nNachricht: ");
    fgets(nachricht,100,stdin);
    
    printf("\nComputername: ");
    fgets(name,100,stdin);
    
    printf("\nAnzahl der Angriffe: ");
    scanf("%hd",&anzahl);
    
    schutz:
    
    printf("\nNach der Ausfuerung System schuetzen?\n\n"
           "0= Nein\n"
           "1= Ja\n\n"
           "Schutz? ");
    scanf("%hd",&schutz);
    
    if (!(schutz == 0 || schutz == 1))
      {
        printf("\nFalsche Eingabe!\nBitte wiederholen!\n\n");
        goto schutz;
      }
    
    printf("\n\n");
    
    system("net start nachrichtendienst");
    
    for (zaehler = 1;zaehler<=anzahl;zaehler++)
      {
        sprintf(buffer, "net send %s NetSpam 1.8;  Nachricht: %s; %hd von %hd"
                      ,name,nachricht,zaehler,anzahl);
        system(buffer);
      }
    
    if (schutz == 1)
      {
        system("net stop nachrichtendienst");
      }
    }
    

    wenn ich die scanf durch fgets ersetze dann kommt in der konsole folgende fehlermeldung

    Das Senden von Dateien wird nicht länger unterstützt.

    und ich hab keine ahnung warum

    danke im voraus

    C Kid



  • hey leute ich bin immer noch nicht weiter gekommen mit meinem problem

    ich hab schon einiges versucht aber es haut einfach net so hin wie ich mir des voerstelle

    ich hoffe dass ihr mir noch helfen könnt



  • C Kid schrieb:

    system("cls");

    Schau bitte im Konsolenforum bzw. in der Konsolen-FAQ nach einer Alternative! system() in Verbindung mit Konsolenbefehlen ist immer schlecht. 👎

    schutz:

    printf("\nNach der Ausfuerung System schuetzen?\n\n"
    "0= Nein\n"
    "1= Ja\n\n"
    "Schutz? ");
    scanf("%hd",&schutz);

    if (!(schutz == 0 || schutz == 1))
    {
    printf("\nFalsche Eingabe!\nBitte wiederholen!\n\n");
    goto schutz;
    }

    Für sowas gibts Schleifen! Goto verwendet man heutzutage im Normalfall nicht mehr und das hat auch seine Gründe. Damit wird sog. Spagetti-Code vermieden. Wofür du es anwendest, ist es auf jeden Fall ungeeignet. Soll heißen, es macht keinen Sinn hier goto zu verwenden.

    Bei deinem Zusammensetzen des net send Befehls kann ich keinen Fehler entdecken. Versuch mal das Programm mit dem Debugger durchzugehen, dann solltest du auf den Fehler schon stoßen.


Anmelden zum Antworten