Szöveg(char) átadása egyik függvényből a main függvénybe?

Címkék
Szöveg(char) átadása egyik függvényből a main függvénybe?
2017-04-27T19:19:36+02:00
2017-04-28T10:10:13+02:00
2022-12-04T12:55:42+01:00
artiny
Helotok
hogyan lehet átadni egy .h fáljban lévő függvényből a main.c fájlba  - egy char típusú adatot?

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <stdio.h> #include <string.h> #include <stdlib.h> /* baudrate settings are defined in <asm/termbits.h>, which is included by <termios.h> */ //#define BAUDRATEB19200 #define BAUDRATE B115200 // Change as needed, keep B /* change this definition for the correct port */ //#define MODEMDEVICE "/dev/ttyAMA0" #define MODEMDEVICE "/dev/ttyUSB0" #define _POSIX_SOURCE 1 /* POSIX compliant source */ //#define FALSE 0 //#define TRUE 1 void gpsRun() { int fd, res; struct termios newtio; char *buf[255]; fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); if (fd < 0) { perror(MODEMDEVICE); exit(-1); } bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */ newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = ICANON; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); write(fd, "$PTNLSNM,273F,01*27\r\n", 21); res = read(fd, buf, 255); buf[res] = 0; /* set end of string, so we can printf */ }
A buf nevű változóra lenne szükségem a fő programban.
Mutasd a teljes hozzászólást!
Te nyertél: ebből egy szót sem értek.

int gpsRun(char buf[], int maxlen) { int fd, res, rdlen; ... res = read(fd, buf, maxlen); if (res>0) { rdlen= res; } else { rdlen= 0; if (res==0) { /* EOF */ fprintf (stderr, "read(%d) returned EOF\n"); } else { fprintf (stderr, "read(%d) returned %d errno=%d: %s\n", res, errno, strerror (errno)); } } buf[rdlen] = '\0'; /* set end of string, so we can printf */ close (fd); return res; } ... int main (int argc, char **argv) { char buf [256]; ... gpsRun (buf, sizeof (buf) -1); }
A formázás borzalmas lett.. megpróbálom csatolni...
Mutasd a teljes hozzászólást!
Csatolt állomány

  • Kössünk üzletet: ha belerakod a handle lezárását, meg a recv után a hibakezelést, akkor elárulom.
    Mutasd a teljes hozzászólást!
  • A meglevo reszrol van szo most?!?  ott kene a handle es a  recv hibakezeles?


    Probáltam már rájönni,hogy lehetne megvalósítani amit akarok,csak nem sikerült. Kitudtam már iratni a konzolba a main függvényböl a buf -t, csak fordításkor warningok jöttek elő.
    Ha ez a .h  fájlt , ami eredetileg a main függvényben volt, akkor szépen müködött. A buf tartalmát kiirattam (loggoltam) egy txt fáljba. De szeretnék belőle egy függvényt csinálni...


    pl. e video alapján , a 5.ik modszer alapján (11:20 nál):
    How to Return an Array from a Function in C Part 2/2így mukodnie kéne ?! 

    How to Return an Array from a Function in C Part 2/2

    void gpsRun(char * result, int size) { .... strncpy(result, buf, size); } int main(void){ char *result = malloc(255); gpsRun(result, 255); //printf("%s\n", result); free(result); }

    de ilyen hibakkat ir ki, es a vegen le sem fut. 
    kép: http://i.imgur.com/j00Jlxk.jpg
    Mutasd a teljes hozzászólást!
  • Te nyertél: ebből egy szót sem értek.

    int gpsRun(char buf[], int maxlen) { int fd, res, rdlen; ... res = read(fd, buf, maxlen); if (res>0) { rdlen= res; } else { rdlen= 0; if (res==0) { /* EOF */ fprintf (stderr, "read(%d) returned EOF\n"); } else { fprintf (stderr, "read(%d) returned %d errno=%d: %s\n", res, errno, strerror (errno)); } } buf[rdlen] = '\0'; /* set end of string, so we can printf */ close (fd); return res; } ... int main (int argc, char **argv) { char buf [256]; ... gpsRun (buf, sizeof (buf) -1); }
    A formázás borzalmas lett.. megpróbálom csatolni...
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Koszonom a valaszt  es a segitseget!
    Elfogadhatom mar most is megoldaskent. esetleg ezek a warningok okozhatjak azt,hogy a kimenet a vegen nem teljessen olyan mint azelott, mielott fuggvenykent kezdtem hasznalni ezt a kodot ?

    gps.h: In function ‘gpsRun’: gps.h:82:11: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat=] fprintf (stderr, "read(%d) returned EOF\n"); ^ gps.h:85:21: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=] res, errno, strerror (errno)); ^ gps.h:85:21: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘char *’ [-Wformat=] gps.h:85:21: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]

    kimenete szoveges fajlnak ez lett:

    $GPGGA,002543.500,,,,,0,0,,,M,,M,,*4D ,M,,M,,*4A ,M,,*49 %S5 $GPRMC,002546.799,V,,,,,0.00,0.00,060180,6.13,W,N*0D 5 $GPGGA,002548.299,,,,,0,0,,,M,,M,,*41



    Evvel az a baj,hogy hianyoznak dolgok a sorok vegerol. Azelott ilyen volt, mielott megprobaltam szetszedni a kodot, es egy fuggvenykent meghivni:

    $GPGGA,011000.600,,,,,0,0,,,M,,M,,*4E $GPRMC,011000.600,V,,,,,0.00,0.00,060180,6.13,W,N*09 $GPGGA,011000.699,,,,,0,0,,,M,,M,,*4E $GPGSA,A,1,,,,,,,,,,,,,,,*1E $GPGSV,1,1,00*79 $GPRMC,011000.699,V,,,,,0.00,0.00,060180,6.13,W,N*09 $GPGGA,011000.800,,,,,0,0,,,M,,M,,*40
    Mutasd a teljes hozzászólást!
  • A formátumstringekben lévő "read(%d)..."-ket írd át "read()..."-re. Amúgy meg ezt illene magadtól kiszúrni.
    Mutasd a teljes hozzászólást!
  • Asse rossz, a file-handle akart volna ott lenni;)

    if (res==0) { /* EOF */ fprintf (stderr, "read(%d) returned EOF\n", fd); } else { fprintf (stderr, "read(%d) returned %d errno=%d: %s\n", fd, res, errno, strerror (errno)); }
    A kimenetet illetően nem azt mondanám, hogy kimaradt valami, inkább azt, hogy szemét került bele... Kezdetnek mondjuk a buf[256]-ot kellene buf[4096]-ra növelni...
    Mutasd a teljes hozzászólást!
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd