char an char [] anhängen



  • hi,

    ich will gerne in eine schleife bilder speichern, dabei gibt es immer einen konstanten anfangsteil und in der mitte eine zahl und dann einen end teil
    hab mir das ganze so überlegt (wobei radius ein int ist der bei jedem durchlauf anderes ist z.b 9):

    char name[19]="";
    char begin[]="c:\\aTestedge";
    char nr[]= (char)((radius%10)+48);
    char end[]= ".tif";
    strcat(name,begin);
    strcat(name,&nr);
    strcat(name,end);
    

    leider kommt da nicht das gewünschte ergebnis, den das ergebnis sieht dann so aus "c:\\aTestedge9[Sonderzeichen Kasterl].tif"
    woher kommt bzw wie bekomme ich den das sonderzeichen weg? oder gibt es irgendeinen einfacheren weg ein char [] aus verschiedenen einzelnen chars und char[] zusammenzusetzten?

    thx
    lordy

    ps über string gehts leider nicht da die speicherfunktion L_CHAR* verlangt ...



  • Mit sprintf!

    char name[19]={NULL};
    sprintf(name, "c:\\aTestedge%d.tif", ((radius%10)+48));
    


  • char name[19] = {0};
    
    sprintf(name, "C:\\aTestedge%d.tif", radius);
    

    mfg



  • oder besser snprinft, wenn du bei der Länge von radius nicht 100% sicher sein kannst und keinen Bufferoverflow riskieren willst

    snprintf(name,19,"blub%d",radius);
    


  • @lord_bk: Lese die Doku über strcat genauer an, dann sieht du deine Fehler. man: strcat(3)

    char *strcat(char *dest, const char *src);
    

    dest und src müssen 0-terminierende strings sein, und das hast du nicht.

    so müssstest das machen

    char name[19];
    char begin[]="c:\\aTestedge";
    char nr[2]= {radius%10+'0', 0}; /* es muss 0-terminierend sein */
    /* es ist besser '0' als 48 zu benutzen, '0' ist nicht immer 48 und IMHO nicht portabel */
    char end[]= ".tif";
    name[0]=0; /* dasselbe, name muss 0 terminierend sein */
    strcat(name,begin);
    strcat(name,nr); /* wozu das &, wenn nr ein char[] war??? */
    strcat(name,end);
    

    die sprintf Lösung sollte da besser sein, weil du das ganze in einer Zeile löst und brauchst auch die ints nicht in char* umzuwandeln.



  • thx @ all hat gut funktioniert 👍



  • supertux schrieb:

    /* es ist besser '0' als 48 zu benutzen, '0' ist nicht immer 48 und IMHO nicht portabel */

    Sofern du dir sicher sein kannst, dass du den ASCII Zeichensatz verwendest, ist '0' immer 48. Ansonsten geb ich dir Recht, wenn du '0' meinst, dann soll man auch '0' schreiben.


Anmelden zum Antworten