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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.