W języku C napis jest przechowywany jako tablica znaków zakończona terminatorem null, czyli bajtem o wartości 0 zapisywanym jako '\0'. Oznacza to, że "koniec napisu" nie wynika z ujemnej/dodatniej wartości znaku, tylko z napotkania właśnie tego terminatora.
W podanej funkcji zmienna i startuje od 0, a pętla for wykonuje kolejne kroki tak długo, jak długo s[i] != '\0'. Gdy pojawi się terminator, pętla się kończy, a zwracana wartość i jest liczbą elementów tablicy przed '\0', czyli długością napisu (liczbą znaków).
Odpowiedź "ilość znaków 0 w zmiennej s." jest błędna, bo kod nie zlicza wszystkich zer w tablicy, tylko zatrzymuje się na pierwszym '\0'. Odpowiedź "częstość wystąpień znaku 'i'." jest błędna, bo i jest tylko licznikiem indeksu, a funkcja nie porównuje znaków z 'i'. Odpowiedź "ilość liczb większych od zero." nie pasuje, bo przetwarzane są znaki w tablicy, a kryterium pętli dotyczy wyłącznie terminatora końca napisu.
Wskazówka egzaminacyjna: jeśli widzisz zliczanie w tablicy znaków aż do '\0', to niemal zawsze chodzi o długość napisu (logika jak w strlen()).