Stringerweitern



  • Ich will einen String erweitern, mit strcat funktioniert es nicht weil der erste teil statisch un der 2te dynamisch sein soll.

    system(strcat("qstat -f ",s));
    

    Kennt irgendjemand eine gute Methode für dieses Problem?
    Gruß HiFish



  • Du kannst einen statischen String garnicht erweitern, höchstens eine Kopie davon erzeugen:

    static const char *cmd = "qstat -f ";
    char *my_string = malloc(strlen(cmd) + strlen(s) + 1);
    strcpy(my_string, cmd);
    strcat(my_string, s);
    system(my_string);
    free(my_string);
    


  • while(feof(fp)==0)
                    {
                            fgets(s,7,fp);
                            printf("%s\n",s);
                            fgets(platzhalter,100,fp);
                            strcat(sys,"qstat -f ");
                            strcat(sys,s);
                            //system(sys);
                            //printf("%s\n",sys);
                            char sys[16]="";
                            i++;
                    }
    

    ich habs jetzt so das funzt mit der Erweiterung, allerdings produziert die Schleife im 2ten Druchgang nen "Segmentation fault"
    wenn ich diese Zeile ausklammere:

    strcat(sys,s);
    

    passiert der nicht also muss es an ihr liegen doch warum???
    Gruß HiFish



  • Du musst sys erst wieder löschen (char sys[16]=""; macht das nicht!), sonst schreibt strcat immer hinten dran und sys läuft über.

    Rücksetzen mit char sys[0]='\0'; müsste helfen.



  • da bekomme ich diese Fehlermeldung:

    cpu_wall.c:42: warning: initializer-string for array of chars is too long
    

    liegt vermutlich daran das ich den sys string ja weiter oben mit 16 Plätzen initialisiert habe 😕 wie kann ich den nen String noch anders löschen?



  • Ist ja nur ne Warnung 😉

    Das müsste aber funktionieren:

    char sys[16]="";
    while(feof(fp)==0)
                    {
                            fgets(s,7,fp);
                            printf("%s\n",s);
                            fgets(platzhalter,100,fp);
                            strcat(sys,"qstat -f ");
                            strcat(sys,s);
                            //system(sys);
                            //printf("%s\n",sys);
                            strcpy(sys,"");
                            i++;
                    }
    


  • prima es geht danke GuyBrush 🙂



  • sieht unschön aus. :p



  • ...

    char sys[16] = "";
    
    while (!feof(fp))
    {
        fgets(s, 7, fp);
        puts(s);
        fgets(platzhalter, 100, fp);
        sprintf(sys, "%s %s", "qstat -f", s);
        //system(sys);
        //puts(sys);
        i++;
    }
    

    puts spuckt den string aus und haengt einen umbruch dran. sprintf ist wie printf, nur gibt es alles in einen string und ist effizienter als zweimal strcat, weil sys sowieso neu aufgebaut wird.


Log in to reply