Naruszenie ochrony pamięci, powodowane przez strstr?

Naruszenie ochrony pamięci, powodowane przez strstr?
LI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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?

Kopiuj
//      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;
}




 
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

char *argv ?
a nie

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

? ;]

  • Rejestracja: dni
  • Ostatnio: dni
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*).

msm
  • Rejestracja: dni
  • Ostatnio: dni
1

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

LI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.