C Programmierung Array/Funktion/pointer

OP #4694521
Lesenswert?

Hallo,

ich habe folgenden Code geschrieben um Daten aus einem .TXT-File mittels 
zu lesen.
1
#include <stdio.h>
2
#include <stdlib.h>
3

4
void read_from_file(char *result, int lenght_result)
5
{
6
    
7
    FILE *ptr_file;
8
    char buf[22];
9
    char buf_old[sizeof(buf)];
10
    char candata_needed[4]; 
11
    //while(1){
12
        ptr_file =fopen("/home/pi/probe.txt","r");
13
        if (!ptr_file){
14
            return 1;
15
        }
16
        if (fgets(buf,sizeof(buf), ptr_file)!=NULL){
17

18
            if(memcmp(buf, buf_old, sizeof(buf)))
19
            {
20
                
21
                memcpy(candata_needed, buf + 17, sizeof(buf));
22
                strncpy(result, candata_needed, lenght_result);
23
                
24
                memcpy(buf_old, buf, sizeof(buf));
25
            }
26
        }
27
        
28
        fclose(ptr_file); 
29
}
30

31

32
int main()
33
{
34
        int i;
35
        int size=4;
36
        char *candata = malloc(size);   
37
        char candata_gen [4];        
38
    while(1){
39
       
40
        read_from_file(candata, size);
41
    memcpy(candata_gen, candata, sizeo(candata));
42
       
43
        printf("candata: %s\n", candata); 
44
    printf("candata_gen: %s\n", candata_gen);
45
        
46
    }
47
    free(candata);        
48
    return 0;
49
}

Die Datei enthält Hex. Zahlen und ich speichere nur 4 davon für meine 
Main-Funktion.

Die Daten sollen angezeigt werden und das gelingt mir auch. Nur bekomme 
ich zwei unterschiedliche Daten angezeigt:
Die Variabel
1
candata
 liefert genau 4 Hex. Zahlen z.B. 0xFF89. Ich speichere diesen Wert mit 
Hilfe der Funktion
1
memcpy(candata_gen, candata, sizeo(candata));
 in ein anderes Array und bekomme allerdings beim Anzeigen die ersten 3 
Hex. Zahlen richtig und das letztes erscheint immer als Symbole (z.B. 
0xFF8§). Ich bin neu in der C Programmierung und wollte wissen, wie ich 
es hinkriegen kann, die Daten richtig speichern und anzeigen kann.
#4694538
Lesenswert?

Hm, die Beschreibung ist etwas wirr und der Quelltext so nicht 
lauffähig.
Bevor jetzt wieder jeder wild herumrätselt, wäre vielleicht eine lesbare 
und verständliche Beschreibung förderlich, und ein lauffähiges Programm.

Nebenbei: wenn man sizeof auf einen Zeiger anwendet, bekommt man die 
Größe des Zeigers, nicht die Größe eines eventuell dafür allokierten 
Feldes.
#4694567
Lesenswert?

Das sizeof(candata) liefert nicht den gewünschten Wert.
(Der mag hier zufällig richtig sein)

printf erwartet bei %s einen Zeiger auf einen Nullterminiertes 
char-Array.
Das ist, durch das memcpy, auch nicht unbedingt gegeben.



Bei memcpy(candata_needed, buf + 17, sizeof(buf)); gibt es auch Müll, da 
candata_needed nur 4 Byte groß ist, du aber 22 Byte kopierst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren