C, naruszenie ochrony pamięci
: 30 października 2007, 23:15
Witam!
Jestem początkującym linuksowym programistą, dziś przeglądałem sobie skrypt z ćwiczeń z programowania i znalazłem tam kod dotyczący podawania argumentów i opcji do programu. O ile obsługa argumentów jest banalna, o tyle obsługa opcji (również banalna) przysporzyła mi problemów. Kod wygląda tak:
I po tym (banalnym) fragmencie kodu (wklejonym wprost z materiałów wykładowcy) zamiast otrzymać wynik dostaję komunikat: "Naruszenie ochrony pamięci".
Próbowałem szukać czegoś na ten temat, jedyne czego się dowiedziałem to to, że ten błąd pojawia się przy próbie sięgnięcia do miejsca w pamięci, do którego nie mam uprawnień.
Ponieważ kod jest napisany poprawnie, przypuszczam, że problemem jest tu funkcja getopt.
Będę bardzo wdzięczny za pomoc...
Pozdrawiam
W.
Jestem początkującym linuksowym programistą, dziś przeglądałem sobie skrypt z ćwiczeń z programowania i znalazłem tam kod dotyczący podawania argumentów i opcji do programu. O ile obsługa argumentów jest banalna, o tyle obsługa opcji (również banalna) przysporzyła mi problemów. Kod wygląda tak:
Kod: Zaznacz cały
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int opcja;
int kod_powrotu=0;
char optstring[] = ":cvf:"; /* przetwarzane opcje */
while ( (opcja = getopt(argc,argv,optstring)) != -1 )
switch ( opcja ) {
case 'c' :
fprintf(stderr,"przetwarzam -c\n");
break;
case 'v' :
fprintf(stderr,"przetwarzam -v\n");
break;
case 'f' :
fprintf(stderr,"przetwarzam -f '%s'\n",optarg);
break;
case ':' : /* brakuje argumentu w opcji */
fprintf(stderr,"opcja -%c wymaga argumentu\n",optopt);
kod_powrotu = 1; /* Wystapil blad */
break;
case '?' :
default :
fprintf(stderr, "opcja -%c nie znana – ignoruje\n", optopt);
kod_powrotu = 1; /* Wystapil blad */
break;
}
printf("Pozostale argumenty:\n");
for ( ; optind < argc; ++optind )
printf("argv[%d] = '%s'\n",optind,argv[optind]);
return kod_powrotu;
}
Próbowałem szukać czegoś na ten temat, jedyne czego się dowiedziałem to to, że ten błąd pojawia się przy próbie sięgnięcia do miejsca w pamięci, do którego nie mam uprawnień.
Ponieważ kod jest napisany poprawnie, przypuszczam, że problemem jest tu funkcja getopt.
Będę bardzo wdzięczny za pomoc...
Pozdrawiam
W.