Initialisierung: pointer array

Gast #6420402
Lesenswert?

Hallo ich habe probleme eine Struct als pointer array zu initialisieren, 
kann man sowas in C überhaupt machen?
1
#include <stdio.h>
2

3
typedef struct {
4
  int const len;
5
  unsigned char * buffer;
6
} mem_t;
7

8
mem_t *data[3] = {
9
    {.buffer = (unsigned char*)"abcde", .len = 4},
10
    {.buffer = (unsigned char*)"abcdef", .len = 5},
11
    {.buffer = (unsigned char*)"abcdefz", .len = 6},
12
}
13

14
int main()
15
{
16
    printf("Hello World");
17

18
    return 0;
19
}
1
main.c:17:5: warning: braces around scalar initializer
2
     {.buffer = (unsigned char*)"abcde", .len = 4},
3
     ^
4
main.c:17:5: note: (near initialization for ‘data[0]’)
5
main.c:17:6: error: field name not in record or union initializer
6
     {.buffer = (unsigned char*)"abcde", .len = 4},
7
      ^
8
main.c:17:6: note: (near initialization for ‘data[0]’)
9
main.c:17:16: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
10
     {.buffer = (unsigned char*)"abcde", .len = 4},
11
                ^
12
main.c:17:16: note: (near initialization for ‘data[0]’)
13
main.c:17:41: error: field name not in record or union initializer
14
     {.buffer = (unsigned char*)"abcde", .len = 4},
15
                                         ^
16
main.c:17:41: note: (near initialization for ‘data[0]’)
17
main.c:17:48: warning: excess elements in scalar initializer
18
     {.buffer = (unsigned char*)"abcde", .len = 4},
19
                                                ^
Gast #6420442
Lesenswert?

>> ist ein array von pointern, die nur mit Speicheradressen initialisiert
werden können.
Stimmt ich brauche garkein Pointerarray :D

Gibt es in c irgendwie ein macro bei dem gleich die länge automatisch 
ermittelt wird, ohne das ich immer nachzählen muss? :D

z.b. sowas:
{.buffer = (unsigned char*)"abcdefz", .len = sizeof(.buffer)}
Gast #6420495
Lesenswert?

struct schrieb:

> z.b. sowas:
> {.buffer = (unsigned char*)"abcdefz", .len = sizeof(.buffer)}

Das sizeof bezöge sich hier die Größe des Zeigers auf den Buffer, also 
z.B. 4 Bytes auf einer Plattform mit 32 Bit, oder 8 Bytes auf 64 Bit - 
und nicht auf die Größe des Buffers selber.
Gast #6420922
Lesenswert?

struct schrieb:
> Gibt es in c irgendwie ein macro bei dem gleich die länge automatisch
> ermittelt wird, ohne das ich immer nachzählen muss?

Die Länge steht doch fest: nämlich soviel, wie ein Zeiger Platz braucht. 
Um das, worauf der Zeiger zeigen soll, mußt du dich separat kümmern.

W.S.

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