Celkový počet stažení aplikací z Flathubu překročil 2 miliardy. Aktuální Statistiky Flathubu: Celkový počet stažení 2 002 793 783. Celkem desktopových aplikací 2 636.
Byla vydána nová verze 4.8.0 programu na úpravu digitálních fotografií darktable (Wikipedie).
Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 142 (pdf) a HackSpace 79 (pdf).
Qtractor (Wikipedie) dospěl do verze 1.0.0. Jedná se o Audio/MIDI vícestopý sekvencer.
Byl vydán svobodný kancelářský balík OnlyOffice Docs 8.1. Vedle četných oprav přináší několik funkcí včetně podpory editace textu v PDF a vytváření formulářů v PDF.
Daniel Stenberg, autor nástroje curl, z databáze SteamDB zjistil, že aktuálně 22 734 her na Steamu používá curl.
Společnost Anthropic vydala Claude 3.5 Sonnet, tj. novou verzi své umělé inteligence Claude (Wikipedie). Videoukázky na YouTube. S Claude 3, stejně jak s GPT-3.5, Llama 3 a Mixtral, si lze pokecat bez přihlašování na DuckDuckGo AI Chat.
Byla vydána nová stabilní verze 6.8 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 126. Přehled novinek i s náhledy v příspěvku na blogu a na YouTube. Vypíchnuta jsou vylepšení v integrovaném poštovním klientu.
Příspěvek Aukce domén – měsíc po spuštění na blogu CZ.NIC shrnuje první měsíc provozu Aukce domén .CZ. Aukcemi prošlo celkem 18 174 domén, z toho na 742 z nich byl učiněn alespoň 1 příhoz. Nejdražší aukcí byla na doménu virtualnisidlo.cz s cenou 95 001 Kč, která však nebyla včas uhrazena. Nejdražší aukcí, která byla vydražena i zaplacena je praguecityline.cz s cenovkou 55 600 Kč.
Před 40 lety, 19. června 1984, Bob Scheifler představil první verzi okenního systému X (X Window System). Vycházela z okenního systému W (W Window System).
#include <stdio.h> #include <string.h> #include <ctype.h> #define myupper(c) ((c) >= 'A' && (c) <= 'Z') enum { MAX = 100 }; int main() { int uppermacro(char *str); int ctypefun(char *str); char str[MAX]; int nupper; while (fgets(str, MAX, stdin) != NULL) { if (str[strlen(str) - 1] == '\n') str[strlen(str) - 1] = '\0'; nupper = uppermacro(str); printf("upper macro: %d\n", nupper); nupper = ctypefun(str); printf("ctype function: %d\n", nupper); } return 0; } int uppermacro(char *str) { int nupper = 0; while (*str != '\0') { if (myupper(*str++)) nupper++; } return nupper; } int ctypefun(char *str) { int nupper = 0; while (*str != '\0') { if (isupper(*str++)) nupper++; } return nupper; } /* while (myupper(c = getchar())) ... ERROR while (isupper(c = getchar())) ... WORKS while ((c = getchar()) != EOF && isupper(c)) ... SAFER */Takový blog sem ještě patří?
Tiskni
Sdílej:
if (str[strlen(str) - 1] == '\n') str[strlen(str) - 1] = '\0';Lebo:
fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s.
echo -e "123456"|./check_end_fgets 49 '1' 50 '2' 51 '3' 0 ''Testovací kód:
#include <stdio.h> #include <stdlib.h> void check_end_fgets() { char buffer[4]; int a; char *p; if(fgets(buffer, 4, stdin) == NULL) return; for(p=buffer,a=0;a<4 && *p != '\n'; a++,p++) printf("%d '%c'\n", *p, *p); } int main(void) { check_end_fgets(); return 0; }
echo "LLLLLLLLLLLLLL"|./cod upper macro: 7 ctype function: 14Oprav si chybu vo funkcií uppermacro().
((*str++) >= 'A' && (*str++) <= 'Z')
getc()
upozornění, že na rozdíl od fgetc()
může být implementována jako makro, které argument vyhodnocuje víc než jednou.
cpp source.c -o source_cpp.h
#define myupper(c) ((c) >= 'A' && (c) <= 'Z')
se dá nahradit něčim jako
#define myupper(c) ((unsigned long)(c - 'A') <= 'Z' - 'A')
(ale je to trochu prasárna)