struct Array: Einträge verschieben. Wie?

OP #284183
Lesenswert?
• ▲
▼
Hallo Leute,

ich bin ein ziemlicher Neuling in C und bin hier über ein Problem
gestolpert. Vielleicht könnt ihr mir helfen!

Ich habe ein Array aus Structs. Es hat 20 Einträge.
1
typedef void (*pfunction)(void);
2

3
typedef struct
4
{
5
    uint id;
6
    ulong timestamp;
7
    ulong delay;
8
    uchar count;
9
    uchar priority;
10
    pfunction function;
11
    struct
12
    {
13
        uchar reload:1;
14
        uchar reload_endless:1;
15
        uchar reload_after_delay:1;
16
        uchar reserved:5;
17
    } parameters;
18
} strTaskEntry;
19

20
strTaskEntry xdata SCHEDULER_HIGH_strTaskList [20];

Situation:
Alle Speicherplätze des Array sind bis auf den Letzten mit wichtigen
Einträgen gefüllt.
Ein Eintrag soll zwischen SCHEDULER_HIGH_strTaskList[9] und
SCHEDULER_HIGH_strTaskList[10] geschoben werden. Da hinten ein Eintrag
fehlt (SCHEDULER_HIGH_strTaskList[19]) will ich alle Einträge von
SCHEDULER_HIGH_strTaskList[10] bis SCHEDULER_HIGH_strTaskList[18] um
einen Eintrag Richtung Ende verschieben.
z.B SCHEDULER_HIGH_strTaskList[11] soll den Inhalt (also ein Struct)
vom SCHEDULER_HIGH_strTaskList[10] bekommen.

Ich wollte das so machen:
1
for ( i2=11; i2!=19; --i )
2
{
3
    SCHEDULER_HIGH_strTaskList[i2+1] = SCHEDULER_HIGH_strTaskList[i2];
4
}

Aber der Compiler meckert:
error48: can not assign values to aggregates.

Habt ihr eine Idee?
Gast #284185
Lesenswert?
• ▲
▼
versuchs mal mit

memcpy(&SCHEDULER_HIGH_strTaskList[i2+1],SCHEDULER_HIGH_strTaskList[i2], 
sizeof(strTaskEntry));

Außerdem solltest du deine for-Schleife GANZ genau ansehen, die stimmt
nicht !

Gruss

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.