Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Diskuze na Lopuchu,
pohlazení na duchu

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub C, C++ [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.
Archiv

Články

Jak bezpečně ukončit vlákno z DllMain
FastAllocPool - urychlení častých alokací a dealokací
Akce a zpráva jako objekt
Tuply v C++
Efektivní alokátor malých objektů a tady druhý a třetí díl
Šablony: Být vládce kvalifikátorů
Vracíme z funkce objekty
Základy komunikace mezi procesy (ve Windows)
Multiple Interface a Instance Factory
Multithreading v C++ (ve Win32)
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: qxjgimk
[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
huh huh 1.5.2011 23:59  847
makefile - nutno uzit tabulatory ne mezery
pokus:    pokus.c
    gcc -std=c99 pokus.c -o pokus -Wall -Wextra `pkg-config --cflags --libs glib-2.0`
huh huh 1.5.2011 23:56  846
Jsem se nudil :-)
#include <stdio.h>
#include <glib.h>

int main() {

    FILE *f = fopen("in.txt""rt");
    if (!f) {
        fprintf(stderr, "Cannot open in.txt");
        return 1;
    }
    

        
    GHashTable *table;
    table = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free);

    while(!feof(f)) {
        int i;
        char s[100];
        fscanf(f, "%x %s", &i, s);
        printf("%x, %s\n", i, s);
        g_hash_table_insert(table, GINT_TO_POINTER(i), g_strdup(s));
    }
    
    
    printf("Zadej hexa klic: ");
    int i;
    scanf("%x", &i);
    char* p = g_hash_table_lookup(table,  GINT_TO_POINTER(i));
    if (p) {
        printf("\n\n%s\n", p);
    } else {
        printf("\n\n%s\n""Neni");
    }


    g_hash_table_destroy(table);
    return 0;
}

huh huh 26.4.2011 19:29  845
Pokud bych nemoh pouzit C++, tak:
a) to by měl zvládnout fscanf(fp, "%x %s", &i, s), první načíst jako hexa číslo, druhé jako řetězec,
b) bych použil třeba hash tabulky z glib

themajkl themajkl All those moments will be lost in time - like tears in rain. 26.4.2011 13:21  844
DotazPánové, okolnosti mě přinutily mírně přiohýbat nějaký sw. Potřebuju se zeptat na nějaké věci kolem C (gcc pod linuxem).
Potřebuju:
a) načíst z konfiguračního souboru položky typu
# 2byte_hexanumero hexa_řetězec různé délky, např
05b2 fe5a6b0105
položek může být různý počet (v praxi jich bude několik desítek)

b) dál někde v programu určit, jestli je nějaké jiné číslo jedno z těch, co bylo na první pozici a pokud ano, dostat se k řetězci patřičného řádku.

V obou případech potřebuju kopnout správným směrem (které funkce použít), protože sice bych to asi napsal i z nuly, ale je to a) zbytečné a u b) tam nevím, vůbec kudy, protože cyklus 1-64 tisíc je jaksi pitomost, že.

Díky moc.
michvolka Michvolka pšt! 18.2.2011 17:44  843
Spam..?Do naší společnosti sháníme programátora. Práce v Praze (dobrá dostupnost). Všechny další informace jsou v inzerátu:

http://www.inetprint.cz/kariera-programator-asp-aspnet

Kdyby měl někdo nějaké dotazy tak prosím do mé pošty.

Pokud byste věděli o někom, kdo by mohl odpovídat naším požadavkům, tak mu to prosím přepošlete. Díky.
bredy 4.1.2011 21:16  842
Velmi správně. Mimochodem, valná většina mých alokátorů často právě končí nějakou takovou alokací. Vzpoměl jsem si na to, když jsem předělával alokátory k mému AutoArray (obdoba vektoru), nahrazoval jsem mallocy tímhle. Mimochodem při použití operator new není třeba includovat stdlib.h
huh huh 4.1.2011 09:41  841
Co trebavoid *p = operator new(N);
...
operator delete(p);
bredy 3.1.2011 15:45  840
huhAbych byl pochopen. Malloc je C a ne C++, přestože to co mám na mysli nakonec končí také mallocem (ale nemusí). new char[n] by mohlo, ale problém je, že new[] dělá něco navíc a některé implementace mohou alokovat věci, které souvisí alokací polí (například vím, že new std::string[n], připojí před pole číslo udávající počet prvků, ale MSVC ani GCC toto neudělá u new char[n]... což neznamená, že to jinde není jinak.

std::allocator ... upřímě, tak mizerný alokátor snad nemá smysl používat. Já vím, že do C++ patří i STL, ale pokud já mluvím o C++, většinou myslím normu bez STL, nebo minimálně ty části STL, které lze nahradit něčím lepším (například typeinfo, které patří do STL, a nahradit ho něčim jiným nejde, protože je přímo spojeno s neveřejným RTTI interfacem).
bredy 3.1.2011 15:36  839
huhNo řekl bych, že ani jedno, ale doufám, že nejsi jediný čtenář, který by mohl znát odpověď :-) Tak ještě počkám.
huh huh 3.1.2011 10:03  838
Předpokládaje, že nemáš na mysli malloc nebo new char[n], tak mě napadá třeba std::allocator.
bredy 2.1.2011 23:58  837
schválně jestli to někdo ví.

Jak správně alokovat/deallokovat paměť v C++ na zadaný počet bajtů (čili bez konstrukce objektu)
huh huh 30.11.2010 23:57  836
Bredy [835]: char je default implementation defined !
bredy 30.11.2010 22:58  835
char je default signed, takže to vrátí 1. Tady se trošku ukazuje, jak se switch stává nekoncepční v C++. Pominuli nutnost breaků, používat switch v šablonách se opravdu nedoporučuje. Klidně i kdyby to znamenalo, že optimalizace tabulkou skoků by fungovala jen u ordinálních typů a jinak by se to přepisovalo do série ifů.

správně by podle mého názoru mělo být tak, že switch ctí typ selektoru a konvertuje konstanty do stejného typu jako selektor. Bohužel to funguje po staru cečkovsky
huh huh 30.11.2010 17:06  834
Bredy [833]: jen tak nasucho. Je-li char unsigned, tak to vrátí 3, jinak 1.
bredy 30.11.2010 14:07  833
WCKB prosinec
int oops() {
     char ch = 0x80;
     switch (ch) {
     case 0x80:
         return 3;
     case 0x40:
         return 2;
     default:
         return 1;
     }
}

Jak to dopadne?

[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt