Ve spolupráci společností OpenAI a Work Louder byla představena (𝕏) hardwarová klávesnice Codex Micro pro práci s AI agenty. Cena klávesnice je 230 dolarů.
Byl vydán Mozilla Firefox 153.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 153 bude brzy k dispozici také na Flathubu a Snapcraftu.
V linux-cve-announce bylo oznámeno 433 zranitelností za jediný den (19. července).
Byla vydána nová verze 5.44 programovacího jazyka Perl (Wikipedie). Do vývoje se zapojilo 71 vývojářů. Změněno bylo přibližně 270 tisíc řádků v 1 300 souborech. Přehled novinek a změn v podrobném seznamu.
Na 23. září 2026 je do bratislavské Nové Cvernovky naplánovaná jednodenní konference #nobullshit.camp pro tech leadery, DevOps a platform inženýry. Mají tu zaznít upřímné příběhy z praxe o tom, co v produkčních systémech reálně fungovalo, co se pokazilo a co si z toho lidé odnesli. Témata pokrývají tři oblasti – DevOps a platformy (Kubernetes, cloud, provoz systémů), firemní kulturu a leadership. Program běží ve dvou formátech: hlavní
… více »Byla vydána nová verze 1.58 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Josephine Pfeiffer. Vypíchnout lze možnost nmtui zobrazit nastavení Wi-Fi jako QR kód nebo podporu CLAT (464XLAT) a tunelů GENEVE (Generic Network Virtualization Encapsulation).
Zákaz používání mobilních telefonů a dalších elektronických komunikačních zařízení ve školách, jehož uzákonění navrhli jako poslanci premiér Andrej Babiš (ANO) a ministr školství Robert Plaga (za ANO), dnes podle očekávání vláda podpořila. Novinářům to oznámil Babiš, podle Plagy byla podpora kabinetu jednomyslná. Účinnost předkladatelé navrhují od 1. září 2027. Podle opoziční ODS je plošný zákaz líbivé populistické opatření namířené proti digitální gramotnosti dětí.
Vládní CERT upozorňuje (𝕏) na zranitelnost ve WordPress Core: CVE-2026-63030 s přezdívkou wp2shell. Zranitelnost typu vzdálené spuštění kódu (RCE) bez nutnosti autentizace umožňuje útočníkovi spouštět libovolný kód prostřednictvím endpointu WordPress REST API Batch. Ke zneužití není vyžadován platný uživatelský účet ani interakce uživatele. Úspěšné zneužití může vést ke kompletnímu kompromitování webové stránky a souvisejících dat. Zranitelnost postihuje verze WordPress 6.9.0 až 6.9.4 a 7.0.0 až 7.0.1.
Evropská komise (EK) vyměřila čínskému internetovému prodejci AliExpress pokutu 550 milionů eur (13,3 miliardy korun) za porušení povinností vyplývajících z nařízení o digitálních službách (DSA). Platforma podle EK řádně neposuzovala a neomezovala rizika související s prodejem nelegálních, nebezpečných nebo padělaných výrobků na svém internetovém tržišti. Komise zároveň firmě nařídila přijmout nápravná opatření. Podle AliExpressu je pokuta nepřiměřená.
Ruffle, tj. open source emulátor Flash Playeru napsaný v Rustu, byl vydán ve verzi 0.4.0. Ke stažení je také na Flathubu. Přímo ve webovém prohlížeči lze vyzkoušet online dema nebo vlastní swf soubory.
dobrý den, potřeboval bych poradit algorytmus na nahrazení více mezer pouze jednou...tzn. kdyz na vstup zadam: ahoj jak se vede. tak aby to vypsalo ahoj jak se vede
man strtok
algorytmusZačíná to pěkně
.
nahrazení více mezerCo třeba číst znak po znaku a pokud předchozí i současný znak jsou oba mezera, tak nevypsat nic a jinak vypsat ten současný?
#define DELKARETEZCE 20
void StripSpaces(char * retezec);
int main()
{
char * retezec;
retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
scanf(%s,retezec);
StripSpaces(retezec);
return 0;
}
void StripSpaces(char * retezec)
{
char * buffer;
char PredchoziZnak = 'a';
int i = 0;
buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
for(i = 0; i < DELKARETEZCE; i++)
{
if(PredchoziZnak != ' ') buffer[0] = retezec[0];
PredchoziZnak = retezec[0];
}
}
Nic jednodussiho me nenapadlo...
#define DELKARETEZCE 20
void StripSpaces(char * retezec);
int main()
{
char * retezec;
retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
scanf(%s,retezec);
StripSpaces(retezec);
free(retezec);
return 0;
}
void StripSpaces(char * retezec)
{
char * buffer;
char PredchoziZnak = 'a';
int i = 0;
buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
for(i = 0; i < DELKARETEZCE; i++)
{
if(PredchoziZnak != ' ' && buffer[i] != ' ') buffer[i] = retezec[i];
PredchoziZnak = retezec[i];
}
strcpy(retezec,buffer);
free(buffer);
}
A taky by nebylo na škodu tu krásu (myslim, ten řetězec bez násobných mezer) vypsatStripSpaces(retezec); free(retezec);
. Ale to nechme laskavému čtenáři k vyřešení.
.
Tohle by nefungovalo... Je potreba mit druhej citac na ten cilovej buffer.
#define DELKARETEZCE 20
void StripSpaces(char * retezec);
int main()
{
char * retezec;
retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
scanf(%s,retezec);
StripSpaces(retezec);
free(retezec);
return 0;
}
void StripSpaces(char * retezec)
{
char * buffer;
char PredchoziZnak = 'a';
int i = 0;
int j = 0;
buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
for(i = 0; i < DELKARETEZCE; i++)
{
if(PredchoziZnak != ' ' && buffer[i] != ' ') buffer[j++] = retezec[i];
PredchoziZnak = retezec[i];
}
strcpy(retezec,buffer);
free(buffer);
}
#include <stdio.h>
#include <string.h>
char *strip_spaces(char *s) {
int i, pos = 0;
for (i = 0; i < strlen(s); i++) {
s[pos] = s[i];
if (s[i] != ' ' | (s[i] == ' ' && (i < 1 || s[i-1] != ' ')))
pos++;
}
s[pos] = 0;
return s;
}
int main(void) {
char *s = strdup(" toto je retazec ");
printf("'%s'\n", strip_spaces(s));
}
sprintf() tiez meni argument a svet sa nezrutil.Funkce sprintf má jasně dáno, že do toho argumentu bude zapisovat, Váš příklad je zavádějící k
printf("`%s' -> `%s'\n", s, strip_spaces(s)), ale ouha.
Akurat je vhodne napisat do komentara, ze to modifikuje s (keby si to niekto nahodou v tych 8 riadkoch nevsimol).To je určitě vhodné, ba přímo nutné. A taky je jedna věta v lidském jazyce kratší a srozumitelnější, než 8 řádek v C, které nemusí být navíc vždy k dispozici.
$ for i in `seq 1 10`; do time ./a.out; done real 0m2.720s user 0m2.572s sys 0m0.024s real 0m2.678s user 0m2.600s sys 0m0.000s real 0m2.692s user 0m2.612s sys 0m0.008s real 0m2.691s user 0m2.604s sys 0m0.008s real 0m2.675s user 0m2.600s sys 0m0.016s real 0m2.697s user 0m2.608s sys 0m0.004s real 0m2.685s user 0m2.600s sys 0m0.012s real 0m2.692s user 0m2.596s sys 0m0.004s real 0m2.690s user 0m2.596s sys 0m0.008s real 0m2.688s user 0m2.600s sys 0m0.000s
void vyhozeni_mezer (const char* input, char* output)
{
int output_size = 0;
for (int i = 0; i < strlen (input); i++)
{
if (input[i] != ' ')
{
output[output_size] = input[i];
output_size++;
}
else if ((output_size == 0) ||
(output[output_size] != ' '))
{
output[output_size] = input[i];
output_size++;
}
}
output[output_size] = 0;
return;
}
char *strdup_no_dup_space(const char *src)
{
char *dest = (char *) malloc(strlen(src));
char *p_src = src, *p_dest = dest;
if (dest && (*p_dest = *p_src++)) {
while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
p_src++;
}
return dest;
}
A co null terminator?
Nebudu napínat, pro chudinku nulu nemusí být místo :)
char *strdup_no_dup_space(const char *src)
{
if (src == NULL)
return NULL;
char *dest = (char *) malloc(strlen(src) + 1);
char *p_src = src;
const char *p_dest = dest;
if (dest && (*p_dest = *p_src++)) {
while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
p_src++;
}
return dest;
}Teď už by to mělo být dokonalé
char *strdup_no_dup_space(const char *src)
{
if (src == NULL)
return NULL;
char *dest = (char *) malloc(strlen(src) + 1);
const char *p_src = src;
char *p_dest = dest;
if (dest && (*p_dest = *p_src++)) {
while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
p_src++;
}
return dest;
}
/ přenositelnosti.
Někoho by mohlo zaskočit třeba toto:
int isEqual1 = (int)('\377' == 255);
int isEqual2 = ((int)'\377' == 255);
int isEqual3 = ((unsigned int)'\377' == (unsigned int)255);
int isEqual4 = ((unsigned int)((unsigned char)'\377') == (unsigned int)255);
printf("isEqual1==%d\n", isEqual1);
printf("isEqual2==%d\n", isEqual2);
printf("isEqual3==%d\n", isEqual3);
printf("isEqual4==%d\n", isEqual4);
Dobře to není, aneb programátorská hádanka číslo 4 :)
Už je to vyřešené. Operátory jsou právě v pohodě, takto se v C běžně píše, a připadá mi to i přehledné. Horší to bylo s alokací paměti. Občas se stane, že někdo zapomene připočítat NULL terminator (proto mám osobně radši nějakou knihovnu, která obsahuje String, a postará se o to).
Ten původní kód by mu ve Visual Studiu v debug režimu asi vyhodil error (mám pocit, že free() detekuje přepis hned za alokovaným prostorem), v linuxu by si stěžoval valgrind (popřípadě přímo glibc, pokud by měl string ideální velikost).
Tak jednoduchý dotaz a 40 odpovědí, z nichž většina se zaobírá opravováním zapeklitých chyb zaslaných řešení.
(Za prvé: brát s rezervou a s humorem. Za druhé: mám Céčko rád, takže nic proti němu. Za třetí: chybičky se samozřejmě občas vloudí, ale tohle už mi přišlo vážně legrační.)
Jestli se zase někdy nachomýtnu v diskuzi o tom, jak je psaní v C, žonglování s pointery, ukončovacími nulami a dalšími lahůdkami čirý masochismusO tom není třeba diskutovat, to je zřejmé
(A předpokládám, že též bylo zřejmé, že tuhle poznámku si neodpustím.)
.
Zkrátka tohle je nádherná ukázka toho, jak se dá v Céčku krásně žonglovat se všelijakýma fintičkama, ale i zkušený člověk si při tom prostě může nabít držku. Vzpomínám si, jak jsem v prváku na konci semestru psal v Céčku domácí úkol—asi na 200-300 řádků "alignátor" textu (doprava, doleva, na střed a do zarovnaného bloku na zadanou šířku řádky, se zalamováním a já už nevím čím). Nabíjel jsem si hubu na stejných věcech jako diskutující tady a odnesl jsem si z toho jednu z nejcennějších zkušeností ve svém dosavadním informatickém výcviku.
Určitě bys ji udělal, maximálně bys ji tak mnohem déle hledal, protože "víc očí víc vidí". :-P (vtip... nebo ne?
)
Opravdu?
std::string str_no_dup_space(const std::string& str)
{
std::string ret;
std::string::const_iterator it = str.begin();
bool space = false;
for(; it != str.end(); ++it) {
if( *it == ' ' ) {
if( !space )
ret += ' ';
space = true;
} else {
ret += *it;
space = false;
}
}
return ret;
}
. Nakonec jsem za to dostal plný počet bodů ale tim kódem bych se nikde nechlubil.
Na svou obranu musím říct, že ta chyba s ukončovacím bytem byla fakt rafinovaným a zapeklitým způsobem schovaná.
Tiskni
Sdílej: