mit Zeigern ein Array entlanglaufen in C

progger12

Grünschnabel
Hi Leute,
ich habe ein Problem, wobei ihr mir wahrscheinlich ganz einfach helfen könnt, ich komme nur einfach nicht auf die Lösung.
Ausgangspunkt ist folgender:
Ich lese ein Array ein, in dem ich dann nach einem bestimmten Schlüsselwort suche und die nachfolgende Zeichenkette bis zum nächten Blank als String abspreichern möchte.
Folgendes Konstrukt habe ich schon zusammengebaut:

Code:
 char *ptr1 = line2;
const char *ptr2 = "GET"; //schlüsselwort ist GET
char *ptr3 = strstr(ptr1,ptr2); //strstr sollte einen Pointer auf das G zurückliefern
if (ptr3 ==NULL){
printf("Kein GET gefunden\n");
}
 
else{
char datei[100];
int p;
for(p=0; p<100 ; p++){
datei[p]=(*ptr3[(p+4)]); // Hier ist der Fehler, p+4 gibt die korrekte stelle im Array nach dem GET + Leerzeichen an.
if(strncmp((*ptr1[(p+4)]);, " ",1) ==0)
datei[p+1]='\0'; 
p=100;
 
}//of for
Mein Problem ist es nun mit dem Pointer ptr3 auf die danach folgenden Chars zugerifen zu können. Könnt ihr mir dabei helfen?
Vielen Dank im voraus!
Grüße
Hendrik
 
Zuletzt bearbeitet von einem Moderator:
Code:
char *ptr1 = line2;
const unsigned short laenge=100;
const char *ptr2 = "GET"; //schlüsselwort ist GET
char *ptr3 = strstr(ptr1,ptr2); //strstr sollte einen Pointer auf das G zurückliefern

if (ptr3 ==NULL){
  printf("Kein GET gefunden\n");
}else{
  char *pBlank=strchr(ptr3,' ');
  char datei[laenge];
  char *pDatei;
  
  if(pBlank){
    pDatei=datei;
    while(*pDatei==' ' || (pDatei-datei)==laenge){
      *pDatei=*(ptr3+(pDatei-datei));
      ++pDatei;
    }
    pDatei='\0';
  }
}//of for

Wenn ich mich nicht irre, sollte das genauso funktionieren wie du Dir das dachtest.
Unter C++ gibts da viel bessere Methoden, aber mit C hab ich das bei meinem Proxy eigentlich ähnlich gelöst um die GET und POST Anfragen aus dem HTTP-Header zu filtern.
 
Zuletzt bearbeitet:
moin


So benutzt die MSDN die Funktion:
Code:
#include <string.h>
#include <stdio.h>

char str[] =    "lazy";
char string[] = "The quick brown dog jumps over the lazy fox";
char fmt1[] =   "         1         2         3         4         5";
char fmt2[] =   "12345678901234567890123456789012345678901234567890";

int main( void )
{
   char *pdest;
   int  result;
   printf( "String to be searched:\n   %s\n", string );
   printf( "   %s\n   %s\n\n", fmt1, fmt2 );
   pdest = strstr( string, str );
   result = (int)(pdest - string + 1);
   if ( pdest != NULL )
      printf( "%s found at position %d\n", str, result );
   else
      printf( "%s not found\n", str );
}

Ein unterschied ist dein "char *ptr3 = strstr(ptr1,ptr2);", versuch doch mal "char *ptr3; ptr3 = strstr(ptr1,ptr2);".
Wenn ich das grad falsch überlegt hab belehrt mich eines besseren.


mfg
umbrasaxum
 
Danke für eure schnelle Hilfe.

Mein Problem ansich war die Inkrementierung des Zeiger. Ich wußte einfach nicht mehr, dass das mit einer Addition geht. C ist einfach zu lange her.
Die Zeile
Code:
datei[p]=(*ptr3[(p+4)]);
muss in meiner Version einfach nur auf

Code:
datei[p]=(*(ptr3+(p+4)));
geändert werden. Das konnte ich aus Thomas` Quelltext entnehmen.
Danke euch nochmal.
 
Zurück