Variablen Übergabe klappt nicht richtig.



  • Hallo Leute,
    ich habe iene Funktion geschrieben, die etwas auf einen Socket schreibt,
    hier der Prototyp:

    int iWriteSocket(int *iSocketNo, char *filename)
    

    Die Funktion funktioniert auch! Übergebe ich einen Socket und z.B. "index.html". So kann ich mittels einer anderen Funktion auslesen, ob z.B. die Datei vorhanden ist oder nicht.
    Jetzt will ich die Dateien allerdings automatisch prüfen lassen, d.h. ich habe eine Textdatei, wo ganz viele Dateinamen drinne stehen. Diese sollen in einer Schleife ausgelesen werden und dann geprüft werden.

    Der Code:

    while(fgets(szTemp1,sizeof(szTemp1),wordlist))
    	{
    		int iSize;
    		iSize=strlen(szTemp1);
    		char keyword[iSize];
    
    		memcpy(keyword,szTemp1,iSize);	
    
    		printf("%s",keyword);
    
    		// Write Sth. into the Socket	
    		iRC = iWriteSocket(&iSocketNo,keyword);	
    		if(iRC != 0)			 
    			{
    			return 8;
    			}		
    
    		// Read to Answer on the Socket
    		iRC = iReadSocket(&iSocketNo,stRead,sizeof(stRead));
    		if(iRC != 0)
    			{
    			return 8;
    			}
    

    Wie man sieht übergebe ich den Dateinamen als Variable, er kommt auch richtig an! Nur ist der Read immer Leer!! Ich weiss nicht wieso, wenn ich in der iWriteSocket das "keyword" durch z.B. "index.html" ersetzte geht alles!

    Jemand ne idee???
    Dank im Voraus!



  • Tja, was ist der Unterschied zwischen char* und char[11]? Normalerweise erwarte man auch beim Schreiben auf einen Socket (ich haette ja einen Filedescriptor erwartet) nicht nur die Adresse der Daten, sondern auch wieviel Daten von dort aus versandt werden.

    Desweiteren sehr boese auf dem Stack bei variabler Laenge:

    char keyword[iSize];
    

    Auch frage ich mich, warum du szTemp1 nach keyword kopierst, wo es sich danach von szTemp1 nicht mehr unterscheidet, bis auf die Adresse. Auch lohnt es sich ueber 0-Terminierung nachzudenken.



  • hallo,
    also ja ich weiss, die variable speichereservierung ist mist,
    über die Länge, wieviel gelesen wird etc, wird in der funktion "iReadSocket" entschieden, bzw. da stehen noch Fixwerte drin.

    ich verstehe einfach nur nicht, wenn ich "start.html" übergebe gehts, wenn aber die Variable "keyword" den Wert "start.html" hat, ich diese Variable übergebe, nix funktioniert.
    wenn ich in der Funktion ein printf auf die Variable keyword mache, sagt er "start.html". Wert kommt also richtig an.



  • size_t const size = strlen(temp1) + 1; // <-- wegen der 0-Terminierung +1!
    char keyword[size]; // btw. nimm lieber malloc!
    memcpy(keyword, temp1, size);
    

Log in to reply