пробовал... чёто нифига не работает, и я не заметил там возможности выставить размер шрифта и убрать АА, хотелось бы чтоб он брал шрифт установленный для gtk...
За корректное использование size_t в реализации strlen - респект =) Только вот... тут же следом:
int n = strlen(...);
Это при том, что size_t по стандарту unsigned, да и не факт, что оно int... Там же, size в getstr должен бы быть size_t, со всеми вытекающими отсюда последствиями (т.е. int i больше не прокатит, например).
Еще один мелкий, но мерзкий момент: size_t нельзя напрямую пихать в printf, т.к. мы не знаем его размер - это может быть и unsigned long long, например, и тогда %d будет некорректным; кстати, в любом случае это должен быть %u для unsigned. В С99 можно использовать специально для этого введенный %zu, а для более ранних версий стандарта лучше сделать явное приведение к unsigned long, и использовать %lu. Вообще, ко всему, кроме int и char*, в аргументах printf стоит подходить очень осторожно, внимательно читая маны.
И напоследок, совсем уж мелочь. Хорошим стилем считается писать:
getstr(str_1, sizeof str_1, stdin);
Т.е. указание размера буфера через sizeof, а не литералом. Чтоб не метаться потом по коду, меняя очередное "магическое число" в десяти местах.
Всё верно, но типизация не критично.. В С можно почти на любом этапе принадобности произвести преобразование типов.. Вот, если разговор шёл бы о С++, то тут пришлось бы быть внимательнее и строже относится к типизации, хотя, даже там это решаемо.. но, не красиво..
> Всё верно, но типизация не критично.. В С можно почти на любом этапе принадобности произвести преобразование типов..
Йопт... и потом они жалуются, что у них на 64 битах оно собирается с кучей warning'ов, и вообще не работает =/
size_t и ptrdiff_t в стандарте совсем не зря, поверь. Можешь еще погуглить и почитать про то, как народ, который на это забивал, с появлением x86-64 мучился с портированием...
> Я тоже учу Си :) Вот вчера, уже про указатели читал. Попутно роюсь в исходниках разных докаппов и посматриваю в сырцы OpenBSD :D
Не-е-е... учить Ц по исходникам ОС не стоит. Плохому научит. Ядро -- штука специфическая, там можно увидеть вещи, которые не годятся для большей части прикладного софта, например повсеместное использование goto.
> Ядро -- штука специфическая, там можно увидеть вещи, которые не годятся для большей части прикладного софта, например повсеместное использование goto.
Чем ядерные goto плохи для прикладного кода? Раз в Си нет обработки исключений, приходится ка-то выкручиваться.