Mam następujący kod:Jak poprawnie wydrukować liczbę całkowitą i ciąg w c?
char *s1, *s2;
char str[10];
printf("type a string: ");
scanf("%s", str);
s1 = &str[0];
s2 = &str[2];
printf("%s\n", s1);
printf("%s\n", s2);
Kiedy uruchomić kod i wprowadź wejście "A 1" następująco:
type a string: A 1
Mam następujący wynik:
A
�<�
Próbuję odczytać pierwszy znak jako ciąg i trzeci znak jako liczbę całkowitą, a następnie wydrukować je na ekranie. Pierwsza postać zawsze działa, ale ekran po prostu wyświetli losowe rzeczy .... Jak mam to naprawić?
Dzięki
Inna sprawa, że ludzie nie wspomniał na trochę: proszę nie scanf do bufora o ograniczonym rozmiarze. Użytkownik może z łatwością wpisać więcej niż limit i przykręcić program. (patrz także: ataki z przepełnieniem bufora) –
@DennisMeng: Można dodać specyfikator szerokości np. '% 123s'. Jest nadal potencjalnie niebezpieczny, ponieważ ta szerokość nie zawiera terminatora zerowego. – diapir
@diapir Prawda. Ważnym bitem jest uniknięcie przepełnienia bufora. –