logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C]Wyciąganie ze stringa i wpisywanie do tabeli struktur

esh0 02 Kwi 2009 17:45 1333 3
REKLAMA
  • #1 6366682
    esh0
    Poziom 19  
    Mam następujący problem: dostaję ciąg znaków z rs'a, który zapisują do jednej zmiennej i chcę z tego ciągu wyciągnąć dwa podciągi i zapisać je do jednego wiersza tabeli struktur.

    Definicje:
    
    //przed main:
    #define UART_MAXBUFF 37
    char uart_rx_buffer[UART_MAXBUFF+1];
    
    //w main:
    char bufor[20] = "";
    volatile typedef struct ram_structure
    {
    	char name[17];
    	char id[15];
    } bt_device;
    bt_device bt_devices[10];
    


    No i teraz chciałbym przekazać do np. bt_devices[1].name to co jest w stringu uart_rs_buffer od 3 do 19 bajtu, a do bt_devices[1].id to co jest od 21 do 34 - jaką komendą mam to zrobić?

    Na razie mam:
    
    strncpy(bufor, uart_rx_buffer+3, 16);
    bufor[17] = 0;
    *bt_devices[i].name = bufor;
    strncpy(bufor, uart_rx_buffer+21, 14);
    bufor[15] = 0;
    *bt_devices[i].id = bufor;
    


    Ale nie działa. Domyślam się, że nie potrafię dopasować typów, użyć w odpowiednim miejscu wskaźnika... Ktoś jest w stanie mi pomóc? :)

    Aha, tutaj jest cały kod: http://rafb.net/p/S4xE0t37.html
    Gdy jest tak jak w nim, to też jakieś cuda się dzieją...
  • REKLAMA
  • #2 6366894
    piti___
    Poziom 23  
    Witam

    Powinno być tak:
    
    strncpy(bufor, uart_rx_buffer+3, 16); 
    bufor[16] = 0; 
    for(a=0;a<17;a++)
    bt_devices[i].name[a] = bufor[a];
    strncpy(bufor, uart_rx_buffer+21, 14); 
    bufor[14] = 0; 
    for(a=0;a<15;a++)
    bt_devices[i].id[a] = bufor[a];
    



    Pozdrawiam
  • REKLAMA
  • #3 6366961
    esh0
    Poziom 19  
    Chyba nie, gdy tak zrobię jest warning
    warning: array subscript has type 'char'
    dla linii przypisania.

    Dodano po 7 [minuty]:

    Zrobiłem :)
    
    strncpy(&bt_devices[i].name[0], uart_rx_buffer+3, 16);
    bt_devices[i].name[16] ='0';
    strncpy(&bt_devices[i].id[0], uart_rx_buffer+21, 14);
    bt_devices[i].id[14] = 0;
    
  • #4 6368901
    piti___
    Poziom 23  
    Linię:
    bt_devices[i].name[16] ='0';
    zmień na:
    bt_devices[i].name[16] =0;

    String musisz zakończyć wartoscią zero (0x00) nie znakiem '0'.
REKLAMA