W kodzie zadeklarowano tablicę znaków: char str1[30], czyli bufor na tekst zakończony znakiem NUL (\0). Taka tablica może być poprawnie zainicjalizowana literałem łańcuchowym, czyli napisem ujętym w cudzysłów, np. "Ala ma kota". Wtedy kompilator zapisuje kolejne znaki oraz dodaje znak zakończenia.
W pokazanym fragmencie użyto jednak apostrofów: 'Ala ma kota'. W C/C++ apostrof służy do zapisu literału znakowego (pojedynczego znaku), np. 'A'. Zapis wieloznakowy w apostrofach nie jest poprawnym sposobem tworzenia napisu do tablicy char[], dlatego to właśnie jest błąd, który należy wskazać.
Dlaczego pozostałe odpowiedzi są nieprawidłowe?
- "Napis powinien mieć dokładnie 30 znaków." – rozmiar 30 oznacza maksymalną pojemność bufora. Napis może być krótszy; ważne jest tylko, by mieścił się w tablicy (z uwzględnieniem znaku NUL).
- "Do funkcji printf przekazano zbyt mało argumentów." – format "%s" wymaga jednego argumentu będącego wskaźnikiem na napis i ten argument został przekazany (str1), więc liczba argumentów się zgadza.
- "W funkcji printf nie można stosować formatowania %s" – przeciwnie, %s jest standardowym specyfikatorem do wypisywania napisów zakończonych NUL.
Wskazówka egzaminacyjna: jeśli widzisz char[] i tekst, szukaj cudzysłowów; jeśli widzisz pojedynczy znak typu char, wtedy właściwy jest apostrof.