Hallo C-Freunde ...
ich möchte aus drei Datein jeweils die einzelnen Werte auslesen und in
ein mehrdimensionales char Array schreiben ... 3 Zeilen, 64 Strings.
1 2 3 4 5 6 7 8 ... (n)
1
2 X
3
um auf diese Strings dann direkt zu referenzieren (sensorid[2][4] = X).
Was meint ihr ->
Hi,
Ich denke du müsstest dein Array etwas größer machen, denn
sensorid[3][...][...] geht ja von sensorid[0] bis sensorid[2] und nicht
von 1 bis 3.
Der sizeof Befehl ist etwas ungeeignet, da er wahrscheinlich die
Gesamtgröße des Arrays ausgibt. Der Wert von 16 darf aber nicht
überschritten werden, da du deine Stringlänge auf 17 definiert hast.
syslog kenne ich nicht. Ich vertraue mal darauf, dass du den Befehl
kennst ;)
1
#define Dateien = 3
2
#define Werte = 64
3
#define Zeichen = 16
4
5
6
int ds2482_sysfs_init(void) {
7
8
char sensorid[Dateien+1][Werte+1][Zeichen+1];
9
10
for (i=1; i<=Dateien; i++)
11
{
12
char *fn;
13
sprintf ( fn, "/sys/bus/w1/devices/w1_bus_master%d/w1_master_slaves", i );
> fgets ( sensorid[i][count], sizeof(sensorid), fp )
sizeof(sensorid) ist die Größe des ganzen Arrays,
nicht nur eines einzelnen Eintrages.
Ich denke, Du müsstest (neben den anderen oberen Ratschlägen)
hier etwas in der Art
fgets ( sensorid[i][count], sizeof(sensorid[i][count]), fp )
verwenden.
Hi Martin ...
Martin L. schrieb:> Hi,>> Ich denke du müsstest dein Array etwas größer machen, denn> sensorid[3][...][...] geht ja von sensorid[0] bis sensorid[2] und nicht> von 1 bis 3.>> Der sizeof Befehl ist etwas ungeeignet, da er wahrscheinlich die> Gesamtgröße des Arrays ausgibt. Der Wert von 16 darf aber nicht> überschritten werden, da du deine Stringlänge auf 17 definiert hast.
Ja, die IDs sind 15+/0+/n
1
syslog(LOG_INFO,"%s",sensorid[i][count]);
Dec 15 13:47:44 rpi 1wirevz: 28-0000042b0406
Dec 15 13:47:44 rpi 1wirevz: 28-0000042b410e
Dec 15 13:47:44 rpi 1wirevz: not found.
Dec 15 13:47:44 rpi 1wirevz: not found.
Mit
>> char *fn;
legst Du nur Speicher für einen Pointer (z.B. 4 Bytes auf 32 Bit System)
an. Dann schreibst Du aber viele Bytes hinein...
Du brauchst etwas wie
char fn[128];
Henrik Wellschmidt schrieb:> Hi g457 ... das passt nicht?
Wo zeigt fn denn hin ?
Richtig, irgendwohin ... nur in (mit großer Wahrscheinlichkeit) keinen
initialisierten Bereich.
Da fehlt noch ein malloc Aufruf.
Helfender schrieb:> Mit>>>> char *fn;>> legst Du nur Speicher für einen Pointer (z.B. 4 Bytes auf 32 Bit System)> an. Dann schreibst Du aber viele Bytes hinein...>> Du brauchst etwas wie>> char fn[128];
Ups, danke!