[c] problem mit strstr()

norbert74

Grünschnabel
Hallo zusammen,
ich verwende Kdevelop unter Suse9.3 und hätte da ein Problemchen mit der strstr()funktion.
Wenn ich die Parameter ganz normal als char* oder char[] deklariere geht es und es werden Substrings gefunden. Was ich jedoch brauche ist als zu suchender String ein Element eines char*-arrays. Ich gebe also z.b. als Parameter
Code:
arrayname[i]
ein. Dort befindet sich ein char*. Doch dies funktioniert nicht, heist dieser String wird von der strstr()funktion im ersten String nicht gefunden. Lasse ich mit
Code:
printf("%s",arrayname[i])
den String ausgeben ist aber alles korrekt, sodass er gefunden werden muss.
ich suche schon seit tagen, hat es eventuell was mit der Speicherallokierung oder fehlenden \0 zu tun ?
Code:
char** arrayname;

ich erzeuge einmal Speicher für das Array
Code:
if ((arrayname = (char**)malloc(nr*sizeof(char*)))==NULL) return 0;

und dann in einer Schleife nochmal für jedes char*-element
Code:
if ((arrayname[i] = (char *)malloc(strlen(string)+1)) == NULL) return 0;

Wie gesagt es funktionert sonst alles, nur die strstr-funktion will nicht.
Wenn jemand da eine spontane Idee hätte, bin ich sehr dankbar.
Viele Grüße
Norbert
 
Hi.

Soweit ich das sehe sollte das eigentlich funktionieren. Aber poste doch bitte mal ein komplettes Beispielprogramm (den Kode nur zu umschreiben bringt meist nicht so viel).
 
ok, also hier der ganze abschnitt:
Code:
#define LINE_LENGTH 80
char    line[LINE_LENGTH+1];
char**  excludelist;
int     nr_excludelines=0;

   if(!get_excludelist()) return 0;
   while (u_reg)
   { 
      u_reg--;
      uptr=*pointer++;
      if (uptr->flag == OBJ_REG)
      {
         exclude=0;
	 i=0;
         while(i < nr_excludelines)
	 {
	    if(strstr(uptr->string,excludelist[i])!=NULL)
	    {
               exclude=1; break;             //hier sollte er reingehen, wenn die strings gleich sind
            }
	    i++;
	 }
         if(exclude==1) continue;
 
         // ...
      }
   }



int get_excludelist(){

   int nr=0,i=0;
   FILE *exclude_fp;

   // open exclude file
   if ((exclude_fp=(FILE*)fopen(sitemapexcludefile,"r"))==NULL) return 0; 

   //count number of URL lines
   nr=getnrlines(exclude_fp);

   if ((excludelist = (char**)malloc(nr*sizeof(char*)))==NULL) return 0;
   i=0;
   while (nr--)
   {
      fgets(line, LINE_LENGTH, exclude_fp);
      /* skip comments and blank lines */
      if ((line[0]=='#') || isspace((int)line[0])) continue;

      if ((excludelist[i] = (char *)malloc(strlen(line)+1)) == NULL) return 0;
      strcpy(excludelist[i],line);
      i++;
   }
   nr_excludelines=i;
   fclose(exclude_fp);
   return 1; 
}
 
Ich habe die Ursache grade gefunden. Es hat sich ein \n an einem Teil der Strings befunden, aber an den anderen nicht. hhmmm, man sollte doch aufpassen wenn man strings aus dateien ausliest ;-)
 
Noch'n Tip: Es gibt hier CODE-Tags. Damit läßt sich der Code leichter lesen. Du würdest allen hier eine Freude machen, wenn Du sie in Zukunft benutzen würdest.
 
Zurück