2015-10-23 13 views
5

Jestem studentem drugiego roku cs, nadal nie jest tak biegły w programowaniu, jak chciałbym być. Pracujemy z OS161 w C w tym roku.Segmentacja na vprintf.c

Na problem, mam napisać program w języku C, który może przyjąć polecenia jak argumenty i wywołać je ponownie. Ok, nie ma problemu. Robiłem to wcześniej w innych językach. Oto kod, który próbowałem:

Kompiluje się dobrze z gcc, ale kiedy go uruchomię, otrzymuję błąd segmentacji. I uruchomić go z gdb, i to, co mam:

Program received signal SIGSEGV, Segmentation fault. 
0x00007ffff7abc493 in _IO_vfprintf_internal (s=0x7ffff7dd97a0, format=<value optimized out>, 
    ap=0x7fffffffe3f0) at vfprintf.c:1623 
1623 vfprintf.c: No such file or directory. 
    in vfprintf.c 

Kiedy zakomentuj printf, to działa, ale oczywiście to nie zrobi to, czego potrzebuję go. O ile mogę powiedzieć, to instrukcje printf są problemem, ale dlaczego? Sprawdziłem to i zawarłem prawy nagłówek. Trudno mi sobie wyobrazić, że coś jest nie tak z vfprintf.c, ponieważ to wszystko ma miejsce w mojej wirtualnej maszynie, do której się włączyłem. Gdyby ktoś mógł rzucić mi kość, naprawdę bym to docenił. Dzięki!

Edytuj, jak widzisz, mam nieprawidłowy specyfikator konwersji. To był cały problem.

+0

Moja gcc daje mi ostrzeżenie na linii naruszającego. Czy twój nie jest? Co się stanie, jeśli włączysz '-Wall'? –

+0

@Nate Eldredge Nie otrzymałem żadnych ostrzeżeń. Nie byłem zaznajomiony z - Wall, zdecydowanie wykorzystam to w przyszłości, dzięki. –

Odpowiedz

9

argc jest liczbą całkowitą, ale użytkownik powiedział printf, aby użyć formatu %s.

printf("\ncmdline args count=%s", argc); 

Ponieważ stosowane %s, printf traktuje wartość argc jako adres pamięci, z którego stara się sprowadzić znaków w ciągu, co zaowocowało winy segmentacji.

zmienić format na %d:

printf("\ncmdline args count=%d", argc); 
+0

Aw, geez Czuję się głupio. Dziękuję bardzo! –

Powiązane problemy