Diskuze: Úkol - řetězce v C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 11 zpráv z 61.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.




Aha. ok. dík moc za vysvětlení i pomoc. Já se teď C budu učit asi odtud místo od učitele. : http://www.sallyx.org/sally/c/
Viem to vyriešiť ale len čiastočne a to tak, že v podmienkach pred
return-om uvoľním tie časti pamäti, ktoré sa returnom nevracajú.
napr.:
// funkcia na uvolnenie pamäti
void free_memory(char *p1, char *p2, char *p3)
{
free(p1);
free(p2);
free(p3);
}
char * strcatat(char *s1, const char *s2, int p)
{
-
if (p > strlen(s1_dyn)) {
strcat(s1_dyn, s2_dyn);
free_memory(pom1, s2_dyn, pom2); // zmazanie nepotrebných
return s1_dyn; // tento bohužiaľ ostane v pamäti do konca behu programu
-
}
[/code
Na spravenie toho zadania nepotrebuješ poznať žiadne funkcie (stačí printf/puts ak chceš dáky výstup):
#include <stdio.h>
//zisti dlzku retazca
size_t my_strlen(const char* str){
size_t i = 0;
for(; str[i] != '\0'; ++i){}
return i;
}
//prekopiruje retazec zdroj do retazca ciel
char* my_strcpy(char* ciel, const char* zdroj){
while(*zdroj != '\0'){
*ciel = *zdroj;
++ciel;
++zdroj;
}
*ciel = '\0';
return ciel;
}
//prekopiruje retazec zdroj na koniec retazca ciel
char* my_strcat(char* ciel, const char* zdroj){
while(*ciel != '\0')ciel++; //najde koniec retazca
return my_strcpy(ciel, zdroj);
}
char *strcatat(char *s1, const char *s2, int p) {
if(p < 0 || my_strlen(s2) == 0)return 0;
if (p >= my_strlen(s1)){
my_strcat(s1, s2);
}
else{
int i;
const int s2_size = my_strlen(s2); // strlen nepoužívat uvnitř cyklu!
// původní část řetězce kopíruji dozadu, aby se uvolnilo
// místo pro řetězec s2
for (i = my_strlen(s1); i >= p; i--)
s1[i+s2_size] = s1[i]; // kopíruju o délku s2
// vkládám s2 na určené místo
for (i = 0; i < s2_size; i++)
s1[p+i] = s2[i];
}
return s1;
}
int main(){
char str[30]= "Dum a";
strcatat( strcatat( str, "n", 4), " kraji silnice", 100);
puts(str);
}
Aha.:[ Asi takhle nepočítej s tím že tu učitelé při výuce programování naučej úplně všechno. To se předpokládá že jako programátor si najdeš většinu věcí sám v online dokumentaci..Popisy funkcí,jejich parametry, návratové hodnoty atd, obvykle tam jsou i příklady.. Pamatuju dobu když jsem ještě kdysi začínal programoval v céčku, tak jsem měl vedle položenej asi 200 stránkovej manuál s těmahe knihovníma funkcema kde jsem si to hledal.
Ale ten malloc, ten musíš pochopit,jinak je ta práce s řetězci v C dost
nebepečná. Jde o to že ty když deklaruješ v C text. řetězec s proměnnou
typu char *s tak tím nemáš přiřazený žádný prostor kam by jsi ty znaky
v řetězci mohl ukládat, takže jak jsi sám psal by sis mohl přepsat jiné
informace. Čili až když napíšeš char *s = (char *) malloc(100);
tak až tím máš zajištěný prostor v proměnné s pro uložení až 100
znaků v text. řetězci..
Veľmi pekne napísané, ale ešte tam chýba prilepenie odrezanej časti prvého reťazca na koniec reťazca.
Díky za upozornění, Libco, ale nechybí. Funkce strcat dělá konkatenaci, nikoliv insert. Stejně tak NULL jako návratová hodnota je z hlediska designu knihovních C funkcí nesmysl.
Nemalo byť v kóde return dest; namiesto return s1; ?
Zobrazeno 11 zpráv z 61.