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] Operacje na łańcuchach znaków

Piotr Kania 30 Mar 2009 16:18 4812 10
REKLAMA
  • #1 6353555
    Piotr Kania
    Poziom 15  
    Witam, zrobiłem urządzenie które wysyła mi smsem temperaturę gdy na nie zadzwonię. Temperaturę wysyłam w ten sposób
    wyslijsms(dtostrf(celcius, 3, 1, tab));
    


    Problem jest taki że chce dodać to tej temperatury znaczek stopnia i znak C.
    Normalnie znaki wysyłam w ten sposób
    wyslijsms("witaj");
    

    funkcja jest zrobiona następująco
    void wyslijsms(char *tekst)
    {
    kod
    }
    


    Czy da się jakoś łączyć łańcuchy znaków?
    Za każdą pomoc dziękuje

    Poprawiłem tytuł.
    [zumek]
  • REKLAMA
  • #2 6353856
    KowalD
    Poziom 17  
    sprinf funkcja moze byc...
    albo jesli chcesz "lżej" to musisz sie pomeczyc... jak wedlug mnie osobiscie to moglbys w ta pierwsza tablice skopiowac znak po znaku z drugiego stringa - oczywiscie w odpowiednie miejsce... i dodatkowo pamietajac o zadeklarowanej wielkosci tablicy...
  • REKLAMA
  • Pomocny post
    #3 6353872
    kaktus_c++
    Poziom 18  
    powinieneś zapoznać się z avr-libc-user-manual

    standrdowa funkcja do łączenia stringów:

    Cytat:
    6.20.3.11 char ∗ strcat (char ∗ dest, const char ∗ src)
    Concatenate two strings.
    The strcat() function appends the src string to the dest string overwriti
    acter at the end of dest, and then adds a terminating ’\0’ character. The
    overlap, and the dest string must have enough space for the result.
    Returns:
    The strcat() function returns a pointer to the resulting string dest.


    czyli:
    dtostrf(celcius, 3, 1, tab);
    strcat(tab," stopni C");
    wyslijsms(tab); 
  • #4 6353995
    Piotr Kania
    Poziom 15  
    Rozwiązanie Kaktusa jest bardzo ciekawe wypróbuje to i dam znać jak zadziała.

    Dodano po 2 [godziny] 24 [minuty]:

    działa dziękuje za pomoc :)

    Dodano po 16 [minuty]:

    a jak zrobić żeby napis był przed temperaturą ?
    aktualnie mam:
    char tab[30];				 
    dtostrf(celcius, 3, 1, tab);
    strcat(tab," stopni Celcjusza"); 
    wyslijsms(tab);
    


    np temp=0.0 stopni celcjusza

    Dodano po 18 [minuty]:

    zrobiłem tak
    
    char tab[40];				
    		char t[5];
    		dtostrf(celcius, 3, 1, t);
    		strcat(tab,"temp=");
    		strcat(tab,t);
    		strcat(tab," stopni Celcjusza"); 
    		wyslijsms(tab);
    


    są problemy jak temperatura jest większa od 9
  • #5 6355444
    kaktus_c++
    Poziom 18  
    jakie problemy? może t[5] jest za małe.
  • REKLAMA
  • #6 6355622
    Freddie Chopin
    Specjalista - Mikrokontrolery
    po pierwsze to strcat służy do łączenia łańcuchów, a tab na początku ma losową zawartośc...

    Swoją drogą - któryś już raz zadajesz pytanie, na które odpowiedź jest w standardowym miejscu - w dokumentacji...

    4\/3!!
  • Pomocny post
    #7 6355706
    kaktus_c++
    Poziom 18  
    Fredi Czopkin ma rację z tą losowością
    może to też być przyczyna.
    jeśli zrobisz tak :
    char tab[40]="temp=";            
          char t[5];
          dtostrf(celcius, 3, 1, t);
          //strcat(tab,"temp=");
          strcat(tab,t);
          strcat(tab," stopni Celcjusza");
          wyslijsms(tab); 

    to wyjdzie dokładnie na to samo, jak nie pomoże to możesz jeszcze ewentualnie zwiększyć rozmiar t[5] na t[6].
  • REKLAMA
  • #9 6356123
    Piotr Kania
    Poziom 15  
    Elektroda jest po to żeby sobie pomagać a nie po to żeby pokazywać kto jest większym cwaniakiem panowie.

    Wracając do tematu powinno być t[6] zapomniałem o przecinku, a z tą losowością zaraz przetestuje

    Dodano po 7 [minuty]:

    char tab[40]="temp=";           
          char t[5];
          dtostrf(celcius, 3, 1, t);
          strcat(tab,t);
          strcat(tab," stopni Celcjusza");
          wyslijsms(tab); 
    


    działa dziękuje kaktus
  • #10 6356521
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Piotr Kania napisał:
    Elektroda jest po to żeby sobie pomagać a nie po to żeby pokazywać kto jest większym cwaniakiem panowie.

    Dokumentacja jest od tego, żeby odpowiadać na 99% pytań jakie mogą się pojawić. No ale skoro wolisz pytać na forum zamiast się czegoś sam dowiedzieć... Forum zaś - jak już zauważyłeś - jest od pomagania. W terminie 'pomaganie' nie mieszczą się jednak takie rzeczy jak 'poszukajcie za mnie w dokumentacji/internecie, bo ja jestem na to zbyt cwany'

    4\/3!!
  • #11 6356956
    Piotr Kania
    Poziom 15  
    Nie wiem czy zauważyłeś ale często sam rozwiązuje swoje problemy i mimo że nikt mi nie odpisze zamieszczam rozwiązania bo może komuś się to przyda. Sądząc po liczbie postów elektroda to całe Twoje życie. Nie wiem ile masz lat ale jak masz pisać tak jak wyżej to ja Ci dziękuje za taką pomoc. Pozdrawiam.

    Temat zamykam problem został rozwiązany
REKLAMA