abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 10:00 | Zajímavý projekt

Justine Haupt aktualizovala svůj open source mobilní telefon s rotační číselnicí a zveřejnila kompletní dokumentaci, vlastní kód, schémata i STL soubory pro 3D tisk. Desku plošných spojů případně i vytištěný obal lze koupit v jejím obchodu.

Ladislav Hagara | Komentářů: 20
dnes 06:00 | IT novinky

Otevřená certifikační autorita Let's Encrypt v příspěvku na svém blogu informuje, že žádosti o vystavení certifikátů nově validuje z několika míst současně (Multi-Perspective Validation). Další informace v diskusním fóru.

Ladislav Hagara | Komentářů: 7
včera 13:55 | Nová verze

Byla vydána verze 15.0 na Debianu založené linuxové distribuce Untangle NG Firewall. Přehled novinek v poznámkách k vydání a ve videu na YouTube. Vyzkoušet lze (zatím neaktualizované) demo webového rozhraní.

Ladislav Hagara | Komentářů: 0
včera 12:11 | Pozvánky

Letošní ročník konference LinuxDays se uskuteční o víkendu 3. a 4. října, opět se potkáme v pražských Dejvicích na FIT ČVUT. Také během devátého ročníku nás budou čekat desítky přednášek, workshopy, stánky a spousta doprovodného programu. Aktuální dění můžete sledovat na Twitteru nebo Facebooku, přidat se můžete také do telegramové diskusní skupiny.

Petr Krčmář | Komentářů: 2
včera 10:22 | Zajímavý článek

Alexander Popov se v příspěvku na svém blogu podrobně věnuje možnostem zneužití bezpečnostní chyby CVE-2019-18683 v linuxovém podsystému V4L2. Videoukázka eskalace práv na YouTube. Chyba byla v upstreamu opravena v listopadu loňského roku. Alexander Popov se chybě věnoval ve své přednášce (pdf) na konferenci OffensiveCon 2020.

Ladislav Hagara | Komentářů: 0
včera 06:00 | Nová verze

Byla vydána nová verze 20.02.17 svobodného multiplatformního video editoru Shotcut (Wikipedie). Přehled novinek v oznámení o vydání. Využíván je MLT Multimedia Framework 6.20.0 a WebVfx 1.2.0. Nejnovější Shotcut je k dispozici také ve formátech AppImage, Flatpak i Snap.

Ladislav Hagara | Komentářů: 2
18.2. 16:22 | IT novinky

Spolkový úřad pro informační bezpečnost (Bundesamt für Sicherheit in der Informationstechnik) schválil používání softwarů Gpg4win a Gpg4KDE, tj. nadstaveb nad GnuPG, pro šifrování a přenos utajovaných informací stupně utajení Vyhrazené (VS-NUR FÜR DEN DIENSTGEBRAUCH (VS-NfD)), EU RESTRICTED a NATO RESTRICTED [reddit].

Ladislav Hagara | Komentářů: 0
18.2. 12:44 | Humor

Viceprezident společnosti Oracle Matthew O'Keefe napsal na Twitteru: "Kdyby databáze Oracle neexistovala, světová ekonomika by se zastavila. Kdyby většina open source distribuovaných databází neexistovala, byl by svět pro data mnohem bezpečnějším místem". Příspěvek rozpoutal diskusi nejenom na redditu a následně byl z Twitteru smazán (Wayback Machine).

Ladislav Hagara | Komentářů: 17
18.2. 09:33 | Nová verze

Byla vydána nová verze 1.38 správce síťových připojení ConnMan (Wikipedie). Z novinek lze zdůraznit podporu WireGuardu.

Ladislav Hagara | Komentářů: 0
18.2. 06:00 | Zajímavý projekt

Byl spuštěn Humble Book Bundle: Cybersecurity 2020 by Wiley. Za 1 euro a více lze koupit 7 elektronických knih, za 7,50 eur a více lze koupit 13 elektronických knih a za 13,50 eur a více lze koupit 20 elektronických knih věnovaných kybernetické bezpečnosti od nakladatelství Wiley. Peníze lze libovolně rozdělit mezi nakladatelství Wiley, Humble Bundle, Electronic Frontier Foundation a Let's Encrypt.

Ladislav Hagara | Komentářů: 0
Vydržela vám novoroční předsevzetí?
 (8%)
 (6%)
 (3%)
 (82%)
Celkem 165 hlasů
 Komentářů: 0
Rozcestník

www.AutoDoc.Cz

Dotaz: C, inicializace stringu

10.10.2019 00:12 Jirka M.
C, inicializace stringu
Přečteno: 389×
Ahoj,

poreboval bych drobnou radu:

v preprocesoru potebuji poskladar string: kde:

#define BASESTRING "CISLO: " #define CISLO1 1 #define CISLO2 2

programova implementace by byla:

char vystup[16]; sprintf(vystup,"%s%u.%u",BASESTRING,CISLO1,CISLO2);

Nicmene bych potreboval, aby to poskladal preprocesor tj:

const char vystup = ????

resp. vystup by mel vypadat takto: const char vystup = "CISLO: 1.2"

Diky Jirka

Řešení dotazu:


Odpovědi

10.10.2019 03:49 debian+
Rozbalit Rozbalit vše Re: C, inicializace stringu
Nieco o tom mas na wiki.

A u mna prakticky:
#include <stdio.h>

#define PRE "v"
#define N   "1"
#define N2  "2"
#define S PRE N"."N2
#define SS(a,b) PRE a"."b

int main(int argc, char **argv, char **env)
{
	const char *word = S;
	const char *word2 = SS(N, N2);
	
	puts(word);
	puts(word2);

	return 0;
}

10.10.2019 08:25 rastos | skóre: 61 | blog: rastos
Rozbalit Rozbalit vše Re: C, inicializace stringu
#define BASESTRING "CISLO: " 
#define CISLO1 1 
#define CISLO2 2 

#include <stdio.h>

#define xstr(s) str(s)
#define str(s) #s

#define CISLO1 1
#define CISLO2 2

...
        const char vystup[]=BASESTRING xstr(CISLO1) "." xstr(CISLO2);

Lebo Stringification a String-Constants
10.10.2019 08:27 rastos | skóre: 61 | blog: rastos
Rozbalit Rozbalit vše Re: C, inicializace stringu
Eh. Sorry CISLO1 a CISLO2 tam mám omylom #define-ované dvakrát ;-/
10.10.2019 11:34 debian+
Rozbalit Rozbalit vše Re: C, inicializace stringu
rastos, vies aky je rozdiel medzi nasledovnymi riadkami?
char data[]="meno";
char *data="meno";
const char *data="meno";
10.10.2019 12:07 ehmmm
Rozbalit Rozbalit vše Re: C, inicializace stringu
Ja to nevim. Jaky?
10.10.2019 12:32 rastos | skóre: 61 | blog: rastos
Rozbalit Rozbalit vše Re: C, inicializace stringu

riadok 1. - nemôžeš urobiť data=data2. Teda nemôžeš priradiť do premennej typu pole.
riadok 2. - môžeš urobiť data=data2 ak data2 je pointer. Ale napr. sizeof vracia inú hodnotu ako pri riadku 1, v jednom prípade je to veľkosť pointra (na 32 bitovom systéme typicky sizeof povie 4), v druhom prípade sa vráti veľkosť pamäti zabratej poľom - čo je v tomto prípade 5 (4 písmená a '\0')
riadok 3. - nemôžeš urobiť data[i]='x'. Teda: data[i] je "const char" a priradenie je v rozpore s tým "const".

Tipujem, že toto už je iný level debaty než Jirka potrebuje.

10.10.2019 13:08 debian+
Rozbalit Rozbalit vše Re: C, inicializace stringu
A vies preco? Kedze si opisal, ako to fungujem.

P.S.: co ak chcem vediet co chces. Nikde nie je napisane, ze vo vsetkom, co pouizas musis excelentovat.
10.10.2019 14:06 rastos | skóre: 61 | blog: rastos
Rozbalit Rozbalit vše Re: C, inicializace stringu
Neviem prečo. A neviem ani čo prečo. A nie som si istý ani či sa pýtaš mňa ;-) Ak náhodou áno, tak preformuluj otázku.
10.10.2019 14:14 debian+
Rozbalit Rozbalit vše Re: C, inicializace stringu
Skoda, ze som v otazke nenazval inak prepemenne.

Rasto, vies aj kvoli comu je to tak, tj. platia tieto zakonitosti?
10.10.2019 14:36 rastos | skóre: 61 | blog: rastos
Rozbalit Rozbalit vše Re: C, inicializace stringu

Tá otázka nedáva zmysel.

char *
je iný dátový typ ako
char []
tak sa proste chová inak.

Podobne kľúčové slovo const dáve kompilátoru pokyn, aby niečo robil/nerobil. Nie je to vynútené architektúrou procesora ani božím prikázaním ani ničím podobným. Skrátka jazyk C definuje, že nejaký zápis spôsobuje nejaké chovanie.

10.10.2019 15:11 MadCatX | skóre: 25 | blog: dev_urandom
Rozbalit Rozbalit vše Re: C, inicializace stringu
Narážíš na to, že řetězce zapsané jako literály, na které je ukazováno char *em jsou ve výsledné binárce uložené v segmentu .rodata a tudíž se nedají modifikovat?

Mezi
      char *s = "Peppa";
const char *t = "Pig";
v principu není rozdíl, akorát v tom druhém případě kompilátor zabrání tomu, aby se někdo pokusil udělat t[0] = 'B'.
10.10.2019 12:15 rastos | skóre: 61 | blog: rastos
Rozbalit Rozbalit vše Re: C, inicializace stringu
Pokiaľ máš výhrady k tomu, že som použil const char [], tak to povedz. Ale neotáčaj toto vlákno k debate o tom, či ja niečo o C viem alebo neviem.
10.10.2019 12:59 debian+
Rozbalit Rozbalit vše Re: C, inicializace stringu
Jirka M., pouzivaj funkciu snprintf
10.10.2019 13:26 debian+
Rozbalit Rozbalit vše Re: C, inicializace stringu
Najlepsie napisane:
#include <stdio.h>

#define PREFIX "v"
#define MAJOR  1
#define MINOR  2
#define STR(a) #a
#define VERSION(a,b) PREFIX STR(a) "." STR(b)

int main(int argc, char **argv, char **env)
{
	const char *version = VERSION(MAJOR, MINOR);
	
	puts(version);

	return 0;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.