Naruszenie ochrony pamięci, powodowane przez strstr?

0

witam, mam taki banalny programik (jest to prosty grep z książki K&R) i zawsze jak wywołam go to mam błąd "Naruszenie ochrony pamięci".
doszedłem do tego że błąd jest w funkcji strstr w 2 argumencie, jak wywołam na sztywno tak: (strstr(line, "define") to działa. O co chodzi? Np. takie coś działa: printf("%s", argv[1]); wieć czemu tutaj nie działa?

//      grep.c
//      

//test


#include <stdio.h>
#include <string.h>

#define MAXLINE 1000

int getline2(char s[], int lim);

//char * strstr ( const char *, const char * );

// wypisz wiersze pasujące do wzorca z 1 argumentu
int main(int argc, char *argv)
{
	
	char line[MAXLINE];
	int found=0;
	
	if(argc!=2)
		printf("format wywołania: find wzorzec\n");
	else
		while(getline2(line, MAXLINE) > 0)
			if(strstr(line, argv[1]) != NULL) {
				printf("%s", line);
				found++;
			}
	
	 
	
	
	
	return found;
}


int getline2(char s[], int lim)
{
  int c, i;

  for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i++)
    s[i] = c;
  if (c == '\n') {
    s[i++] = c;
  }
  s[i] = '\0';
  return i;
}




 
0

char *argv ?
a nie

char *argv[]
//albo
char** argv

? ;]

0

Dla mnie uzywanie funkcji typu strstr jest glupota. Ta funkcja nawet nie pozwala na uzycie 0x00 w lancuchu.
Lepiej wlasnorecznie przeszukiwac pamiec, niz uzywac takich funkcji i pochodnych (tak naprawde duzo funkcji wymieka na bajcie 0x00, wyjatek to te z przedrostkiem mem*).

1

@up - jeśli chcesz możesz pisać wszystko od zera... Ja jednak wolę (znając jej ograniczenia) użyć funkcji z biblioteki standardowej.

0

jestem ślepy albo musze umyć monitor :), thx

1 użytkowników online, w tym zalogowanych: 0, gości: 1