Byl vydán Debian 13 s kódovým názvem Trixie. Přehled novinek v poznámkách k vydání.
WLED je open-source firmware pro ESP8266/ESP32, který umožňuje Wi-Fi ovládání adresovatelných LED pásků se stovkami efektů, synchronizací, audioreaktivním módem a Home-Assistant integrací. Je založen na Arduino frameworku.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.8.
Herní studio Hangar 13 vydalo novou Mafii. Mafia: Domovina je zasazena do krutého sicilského podsvětí na začátku 20. století. Na ProtonDB je zatím bez záznamu.
Operátor O2 má opět problémy. Jako omluvu za pondělní zhoršenou dostupnost služeb dal všem zákazníkům poukaz v hodnotě 300 Kč na nákup telefonu nebo příslušenství.
Společnost OpenAI představila GPT-5 (YouTube).
Byla vydána (𝕏) červencová aktualizace aneb nová verze 1.103 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.103 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Americký prezident Donald Trump vyzval nového generálního ředitele firmy na výrobu čipů Intel, aby odstoupil. Prezident to zdůvodnil vazbami nového šéfa Lip-Bu Tana na čínské firmy.
Bylo vydáno Ubuntu 24.04.3 LTS, tj. třetí opravné vydání Ubuntu 24.04 LTS s kódovým názvem Noble Numbat. Přehled novinek a oprav na Discourse.
Byla vydána verze 1.89.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
retazec[i]
retazec+i
'?
char *c; char *new_ptr; { ... for (int i = 0; i < n; i++) { ... // sizeof(char) není nutný, protože // překladač správně zjistí, // že používáme char new_ptr = c + (sizeof(char) * i); ... } ... }
MY_STRUCT *p; ...
p=p+sizeof(MY_STRUCT);
ale
p=p+1;
O tom je pointrová matematika.
To je síce pravda. Ale keď mám pole štruktúr...Snad pole pinterů na struktury, ne? Pak je to
p = p + sizeof(MY_STRUCT *)
inak povedané, ptr[index]
je ekvivalentné s *(ptr + index)
, *(index + ptr)
i index[ptr]
... odovzdať zadanie s tým posledným zápisom by tiež mohlo byť zábavné )
sizeof(MY_STRUCT *)
, tak se dostanu na pointer následující struktury, což je to, co chci... Nebo mi něco uniklo?
Omlouvám se, ale v C jsem psal naposledy před pěti lety a tohle je to, co mi v hlavě zbylo...
Děkuji za pochopení.
[]
funguje jako operator +
pro ukazatele a cele cislo. Plati toto:
int arr[10]; *(arr + 10) == arr[10];O tomhle je ta pointerova aritmetika.
arr[10] == arr[11] == … == Segmentation fault, core dumped
V takovémhle případě dokonce ve slušném OS platíS OS to bohužel moc nesouvisí, protože malloc při normálním provozu nealokuje paměť od OS. Paměť se alokuje po větších blocích a tam si pak dělá libc vlastní správu. Alokování paměti přímo od OS společně s "ochrannými bloky" pro coredump zajišťuje například electricfence (či nekterý z přehršle pokročilejších nástroju). MSVC má také takovou feature. Samozřejmě mezi základní pravidla psaní v C patří (vedle např. "netolerovat warningy"), že při vývoji se vždy linkuje s efence. V provozu se samozřejmě nic takového pouhžít nedá, to zpomalení je o několik řádů.arr[10] == arr[11] == … == Segmentation fault, core dumped
for (p = ...; *p; p++) { ... }
P.S.: Pokud vás nikdo nepochopil, zkuste se zamyslet nad tím, zda není problém ve vašich formulacích.
++retezec
?
K čemu jsou tyhle školní úlohy? že by se z toho někdo naučil programovat, o tom dost pochybuju…
#include <stdio.h> int main() { char *str = "Nejaky retezec", *tmp = str; while (*tmp) printf("%c", *tmp++); exit(0); }
Tohle ti vypise cely retezec. Nebo je i tohle neco jineho nez jsi chtel?
char * buf = "Good niht white pride!" while(* buf != 0) { printf("znak na adrese %d je %c\n",buf,*buf); ++buf; }
void posun(int cislo){
(*(&cislo - 1)) = (*(&cislo - 1)) + 0x10;
}
len neveim ako to mam spravit pre ten retazec.
&
na parametr předávaný hodnotou nemá námitek.
Prečo? Prameter odovzdávaný hodnotou sa uloží na stack.
Možná. A nebo také ne…
man va_start
void func(int& bla) { bla = 20; //vrátil jsem hodnotu }
void func(int *bla) { *bla = 20; } /* pouziti: */ int n; func(&n);
To je napřesdržku, nedej bože abych nějakého jeho študáka potkal jako kolegu. To není strestné?Pokud se jedná o střední školu (a nižší ročník než čtvrťák), tak by se to dalo kvalifikovat jako "ohrožování mravní výchovy mládeže".
va_list list; char * ptr; void fun (int * retval, ...) { va_start (list, retval); ptr = va_arg (list, char *); for (*retval = 0; *ptr; (*retval)++, ptr++) ; }PS: kompilovať ani inak kontrolovať sa mi to nechcelo, idea je snáď jasná
for((*(&retazec-3))=0;(int)(*(&retazec-3))<(int)(*(&retazec-4));(*(&retazec-3))++)
{
(((char*)(*(&retazec)))[(int)(*(&retazec-3))])=(((char*)(*(&retazec)))[(int)(*(&retazec-3))])^0x39;
fprintf(stdout,"%c",(((char*)(*(&retazec)))[(int)(*(&retazec-3))]));
}
asm(""::"eax" (*(&retazec-4)))
Víte, k čemu slouží domácí úkoly? K tomu, abyste si na nich ověřil, zda látce rozumíte, a pokud ne, abyste to napravil. Tím, že si úkol necháte napsat od někoho jiného, ztrácí úkol svůj smysl.
Jinak je ten váš kód moc hezký, začíná mi to (opticky) trochu připomínat LISP… :-)
#define A ( (int)(*(&retazec-3)) ) #define B ( (int)(*(&retazec-4)) )
*str++
. Vis vubec neco u ukazatelich?
strlen: push ecx xor ecx,ecx xor eax,eax dec ecx cld repne scansb neg ecx mov eax,ecx pop ecx retDo
ES:EDI
hoď adresu řetězce, výsledek dostaneš v ecx. V céčku to zabal do asm{}
(nebo jak se tam vkládá kód assembleru) + navíc tam bude řádek, kde ukládáš tu adresu do es:edi, ale jelikož jsem v C nikdy s vkládaným assemblerem nedělal (podle mně je to čuňárna), tak nevím jak.
void neco(const char *retezec, unsigned long long int& vysledek) { vysledek = 0; while(*retezec++) ++vysledek; }Tak to zadání nesplňuje - retezec je totiz nazev promenne typu char* (ukazatel na první znak v poli x znaků). Pokud bys použil
*(&retezec)
, zase jsi přistoupil k proměnné pomocí jména. Ukazatel na proměnnou totiž bez jména proměnné nezjistíš. Když předáš funkci rovnou ukazatel, přistoupíš k ukazatelu jménem. Úloha je neřešitelná. A navíc, kde je napsáno, že v C na všech platformách jsou předávány argumenty funkcím na stacku? Většinou tomu tak je, ale nemusí.
A navíc, kde je napsáno, že v C na všech platformách jsou předávány argumenty funkcím na stacku? Většinou tomu tak je, ale nemusí.Některé platformy ani zásobník nemají.
int uloha_a(char *str){
int pocet = 0, i = -1; /*pocet -> (&i - 1), str -> (&str + 4)*/
while (((char *) * (&i + 4))[i++] != NULL){ /*prehladavanie retazca po znaku, s podmienkou skoncenia*/
if (((char *) * (&i + 4))[i] >= '0' && ((char *) * (&i + 4))[i] <= '9')/*porovnavanie znaku z cislicou*/
(*(&i - 1))++; /*ak je znak cislica, pocet sa inkrementuje o 1*/
}
}
asm("" :: "eax" ((*(&i - 1)) - 1)); /*vratenie poctu cislic v retazci, cez 32 bit zasobnik eax */
}
Pomocou gdb som si zistil o kolko sa nachdza adresa dvoch dalsich premennych, a zapisal to.
Tiskni
Sdílej: