Příspěvek na blogu Ubuntu upozorňuje na několik zranitelností v rozšíření Linuxu o mandatorní řízení přístupu AppArmor. Společně jsou označovány jako CrackArmor. Objevila je společnost Qualys (technické detaily). Neprivilegovaný lokální uživatel se může stát rootem. Chyba existuje od roku 2017. Doporučuje se okamžitá aktualizace. Problém se týká Ubuntu, Debianu nebo SUSE. Red Hat nebo Fedora pro mandatorní řízení přístupu používají SELinux.
Byla vydána nová verze 19 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v changelogu.
Bitwig Studio (Wikipedie) bylo vydáno ve verzi 6. Jedná se o proprietární multiplatformní (macOS, Windows, Linux) digitální pracovní stanici pro práci s audiem (DAW).
Společnost Igalia představila novou linuxovou distribuci (framework) s názvem Moonforge. Jedná se o distribuci určenou pro vestavěné systémy. Vychází z projektů Yocto a OpenEmbedded.
Google Chrome 146 byl prohlášen za stabilní. Nejnovější stabilní verze 146.0.7680.71 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 29 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
D7VK byl vydán ve verzi 1.5. Jedná se o fork DXVK implementující překlad volání Direct3D 3 (novinka), 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.
Bylo vydáno Eclipse IDE 2026-03 aneb Eclipse 4.39. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Ze systému Slavia pojišťovny uniklo přibližně 150 gigabajtů citlivých dat. Jedná se například o pojistné dokumenty, lékařské záznamy nebo přímou komunikaci s klienty. Za únik může chyba dodavatelské společnosti.
Sněmovna propustila do dalšího kola projednávání vládní návrh zákona o digitální ekonomice, který má přinést bezpečnější on-line prostředí. Reaguje na evropské nařízení DSA o digitálních službách a upravuje třeba pravidla pro on-line tržiště nebo sociální sítě a má i víc chránit děti.
Meta převezme sociální síť pro umělou inteligenci (AI) Moltbook. Tvůrci Moltbooku – Matt Schlicht a Ben Parr – se díky dohodě stanou součástí Meta Superintelligence Labs (MSL). Meta MSL založila s cílem sjednotit své aktivity na poli AI a vyvinout takovou umělou inteligenci, která překoná lidské schopnosti v mnoha oblastech. Fungovat by měla ne jako centralizovaný nástroj, ale jako osobní asistent pro každého uživatele.
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 *)
Existuje niečo také ako "zarovnanie"
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
(Nekamenujte mne, prosím, za pravděpodobnou neznalost elementárních skutečností, nejsem céčkař – naštěstí
).
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.
(co ja bych za to dal mit v ATmega32 neco tak velikeho jako EAX
, nejlepe na matematiku...)
Tiskni
Sdílej: