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