problem mit strcat



  • hallo ich hab das problem das ich einen zeiger auf eine zieldatei erstllen will die sich aus dem namen der quelldatei und einem statischem string zusammensetzt.
    hab das programm so geschrieben allerdings erhalte ich immer einen fehler wenn es in die besagte if schleife geht.

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    char *zieldatei[25];
    
    void pruefzield(char a[], char b[]);
    
    int main(int argc, char *argv[])
    {
    
    	pruefzield(argv[1], argv[2]);
    	printf("%s",*zieldatei);
    	getch();
    
    }
    
    void pruefzield(char a[], char b[])
    {
    	printf("%s \t%s\n", a, b);
    	if(strcmp(b,"-t")==0||strcmp(b,"-h")==0||strcmp(b,"-v")==0||b==NULL){
    		strcat(*zieldatei,a);  //hier fehler
    		strcat(*zieldatei,"-log");
    	}else{
    		if(strcmp(b,"-")==0){
    			*zieldatei="stdout";
    		}else{
    			*zieldatei= b;
    		}
    	}
    }
    

    freu mich über jede antwort



  • Du versuchst in argv[2] reinzuschreiben. Ich bin mir ziemlich sicher dass das nichts wird. Mache dir mit strcpy eine Kopie davon, dann sollte das gehen. Im übrigen solltest du mit argc>3 testen ob argv[2] überhaupt exestiert.



  • versteh irgendwie nicht wo ich versuchen soll in argv[2] reinzuschreiben,
    versuch ja eigentlich nur argv[1] auf den globalen zeiger *zieldatei zu speichern



  • zieldatei zeigt ins Nirvana, weil es nicht initialisiert ist, *zieldatei versucht im ungültigen Speicher zu deferenzieren.

    Kann es sein, dass du gar nicht wirklich versteht, was die Zeile 7 tatsächlich ist?



  • Ok war Blödsinn was ich geschrieben habe. Ich versuchs nochmal.
    Zeile 24: strcat(*zieldatei,a);
    Er soll a an das Ende von zieldatei schreiben. Das Ende wird durch ein '\0'-Zeichen markiert. zieldatei ist aber uninitialisiert, er sucht nach dem '\0'-Zeichen, findet keins und ließt quer durch den Speicher bis es eine Speicherverletzung gibt.
    Entweder packe ein zieldatei[0] = '\0' davor oder benutze strcpy statt strcat.

    Edit: Ach ja, wie Supertux schon angedeutet hat, mach mal das * vor zieldatei in allen Zeilen weg.



  • wenn ich denn * überall weg mache erhalte ich dann aber bei

    zieldatei=b;
    und
    zieldatei="stdout"; nen fehler
    man musste doch aber auch nen zeiger benutzen damit man variablen ausserhalb der main funktion verändern kann oder nich?



  • nwp2 schrieb:

    Du versuchst in argv[2] reinzuschreiben. Ich bin mir ziemlich sicher dass das nichts wird.

    Nett, dass du mir diesmal ein "ziemlich" spendiert hast.

    TC2 5.1.2.2.1 schrieb:

    The parameters argc and argv and the strings pointed to by the argv array shall
    be modifiable by the program, and retain their last-stored values between program
    startup and program termination.

    🙂



  • Was soll denn dieses zieldatei="stdout"; tun? Möchtest du auf "stdout" zeigen oder möchtest du dass in zieldatei "stdout" steht?

    Entweder du bleibst beim Array und ersetzt zieldatei="stdout"; durch strcpy(zieldatei, "stdout"); oder du machst aus zieldatei einen Pointer und besorgst dir dafür Speicher.

    Du kannst globale Variablen ändern, Pointer oder nicht.

    µngbd schrieb:

    Nett, dass du mir diesmal ein "ziemlich" spendiert hast.

    TC2 5.1.2.2.1 schrieb:

    The parameters argc and argv and the strings pointed to by the argv array shall
    be modifiable by the program, and retain their last-stored values between program
    startup and program termination.

    🙂

    Wieso dir? Wo du gerade am kramen bist, wieviel kann man denn dort reinschreiben?



  • und_zwar schrieb:

    wenn ich denn * überall weg mache erhalte ich dann aber bei

    zieldatei=b;
    und
    zieldatei="stdout"; nen fehler
    man musste doch aber auch nen zeiger benutzen damit man variablen ausserhalb der main funktion verändern kann oder nich?

    bevor du weiter ahnungslos programmierst, nimm dein C Buch/Tutorial und lies dir das Kapitel mit Zeigern und Strings noch mal durch.



  • supertux schrieb:

    bevor du weiter ahnungslos programmierst, nimm dein C Buch/Tutorial und lies dir das Kapitel mit Zeigern und Strings noch mal durch.

    Sei nicht so streng mit dem Fragesteller. Das ist eine typische Verständnisfrage von Zeigern und char-strings. Was er gemacht hatte sind 25 Zeiger auf sonst leere char-strings. Aber es stimmt, das muss man schon selbst lernen!


Anmelden zum Antworten