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.
Americká technologická společnost Apple uskuteční v USA další investice ve výši sta miliard dolarů (2,1 bilionu korun). Oznámil to ve středu šéf firmy Tim Cook při setkání v Bílém domě s americkým prezidentem Donaldem Trumpem. Trump zároveň oznámil záměr zavést stoprocentní clo na polovodiče z dovozu.
Zálohovací server Proxmox Backup Server byl vydán v nové stabilní verzi 4.0. Založen je na Debianu 13 Trixie.
Byla vydána nová verze 1.54.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Jan Václav.
Knižní edice správce české národní domény přináší novou knihu zkušeného programátora Pavla Tišnovského s názvem Programovací jazyk Go. Publikace nabízí srozumitelný a prakticky zaměřený pohled na programování v tomto moderním jazyce. Nejedná se však o klasickou učebnici, ale spíše o průvodce pro vývojáře, kteří s Go začínají, nebo pro ty, kdo hledají odpovědi na konkrétní otázky či inspiraci k dalšímu objevování. Tištěná i digitální verze knihy je již nyní k dispozici u většiny knihkupců.
OpenAI zpřístupnila (en) nové nenáročné otevřené jazykové modely gpt-oss (gpt-oss-120b a gpt-oss-20b). Přístupné jsou pod licencí Apache 2.0.
Byla vydána RC verze openSUSE Leap 16. S novým instalátorem Agama, Xfce nad Waylandem a SELinuxem.
Google Chrome 139 byl prohlášen za stabilní. Nejnovější stabilní verze 139.0.7258.66 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 12 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře. S verzí 139 přestal být podporován Android 8.0 (Oreo) a Android 9.0 (Pie).
FILE *p_f=fopen("soubor.txt","r+");, soubor přitom soubor existuje. Dále mám
if(p_f==NULL){ printf("Chyba pri otevirani souboru\n"); fclose(p_f); }. Všechny potřebné knihovny jsou inkluovány, tak nevím kde je chyba. Googlem brázdím něco přes hodinu a půl a na nic jsem nepřišel. Jen jsem zjistil, že je tam potřeba použít fce malloc, bohužel jsem začátečník, tak nevím jak dál. Používám pro studium knihu od K&R. Díky všem za nápady.
Řešení dotazu:
if ((vstup=fopen("soubor.txt","r"))) { /* zpracování ... */ fclose(vstup); } else printf("Nelze otevřít soubor pro čtení!\n\a");
if ((vstup=fopen("soubor.txt","r"))) { if((fgets(pointer,10000000,vstup))==NULL) { printf("Chyba 1 \n"); } pointer=druhe_pole; if((fgets(pointer,10000000,vstup))==NULL) { printf("Chyba 2 \n"); } fclose(vstup); } else { printf("Chyba pri otevirani souboru\n\a"); }Váš kód mi fungoval bezproblému, děkuji za něj, bohužel, i když jsem to spravil, nepomohlo to.
pointer
, máte tam rezervováno místo pro 10 000 000 bytů (charů) na to dám krk #include <stdio.h> #include <stdlib.h> #define MY_SIZE (100000) //main.cpp int main(int argc, char **argv) { char *pointer = NULL; char *prvni_pole = NULL; char *druhe_pole = NULL; if((prvni_pole = (char*) malloc(sizeof(char) * MY_SIZE)) == NULL) { printf("Chyba 0-1, nedostatek paměti\n"); exit(3); } if((druhe_pole = (char*) malloc(sizeof(char) * MY_SIZE)) == NULL) { printf("Chyba 0-2, nedostatek paměti\n"); free(prvni_pole); exit(3); } //aspon prvni_pole[0] = druhe_pole[0] = 0x0; //nebo cela alokovana pamet: //memset(prvni_pole,0x0,MY_SIZE); //memset(druhe_pole,0x0,MY_SIZE); FILE *vstup; if ((vstup=fopen("soubor.txt","r")) == NULL) { printf("Chyba pri otevirani souboru\n"); exit(3); } //ukazatel na první pole i když se m;že použít přímo prvni_pole pointer = prvni_pole; if((fgets(pointer,MY_SIZE,vstup))==NULL) { printf("Chyba 1 \n"); } if(feof(vstup)){ printf("Chyba uz tam teho vice není\n"); } else { //ukazatel na druhe pole i když se může použít přímo druhe_pole pointer=druhe_pole; if((fgets(pointer,MY_SIZE,vstup))==NULL) { printf("Chyba 2 \n"); } } //obvykle netestuje návratovou hodnotu fclose(vstup); printf("prvni_pole: %s\n",prvni_pole); printf("druhe_pole: %s\n",druhe_pole); //neuskodi pointer=NULL; if(prvni_pole != NULL)//fcil zbytecne free(prvni_pole); //mozna dobry navyk prvni_pole=NULL; if(druhe_pole != NULL)//fcil zbytecne free(druhe_pole); //mozna dobry navyk druhe_pole=NULL; return 0; }
char prvni_pole[MY_SIZE];? Dynamicke alokaci se snazi clovek co nejvice vyhnout...
Proc proboha alokujes pole dynamicky?Protože 20MB (dle původního dotazu) nechci jinak.
Dynamicka alokace je mnohem pomalejsi, nez staticka.Rozdíl rychlosti alokace bude neměřitelný a výsledek možná opačný pokud proměnné budou mimo fci main.
Co ti brani v tom, pouzit…Brání mi rozum a ohled na ostatní.
Dynamicke alokaci se snazi clovek co nejvice vyhnout...Dle této definice nejsem člověk
FILE *fp; if ((fp = fopen("myfile", "r")) == NULL ) { perror("unable to open file"); return -1; } /* praca so suborom a nasledne close */ fclose(fp); return 0;pri uceni je vhodne pouzit aj debugger, napriklad
gdb
. google ti da vela quick howto ako co .. v tvojom pripadne napriklad:
$ gcc -g -o atest test.c
$ ./atest
attempt to close empty null handle
Segmentation fault: 11 (core dumped)
$
$ gdb ./atest atest.core
GNU gdb 6.1.1 [FreeBSD]
--[snip]--
(gdb) where
#0 0x0000000800719e37 in fclose () from /lib/libc.so.7
#1 0x0000000000400686 in main () at test.c:8
(gdb) list 8
3 int main() {
4 FILE *p_f = fopen("soubor.txt","r+");
5
6 if(p_f == NULL ) {
7 fprintf(stderr, "attempt to close empty null handle\n");
--- vystup z where -> 8 fclose(p_f);
9 }
10
11 return 0;
12 }
kde atest
je tvoj spustitelny program, core file sa vygeneroval po segfaulte.
Tiskni
Sdílej: