char array um x Byte von links abschneiden

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

char array um x Byte von links abschneiden

Beitrag von darkwin » Fr Aug 13, 2021 5:48 pm

Hallo, ich möchte ein char array von links abschneiden.
Das versuche ich mit einem Pointer, das möchte aber nicht wie ich will.

Code: Alles auswählen

#include <stdio.h>
#include <string.h>
 
int main(void)
{
  char   text[] = "Hello proggen.org";
  char * textptr = text;
 
  printf( "Groesse von text   : %lu Bytes / Elemente\n", sizeof( text ));

  // 6 Bytes abschneiden
  text = &textptr - 6;
  printf( "Groesse von text   : %lu Bytes / Elemente\n", sizeof( text ));
  

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: char array um x Byte von links abschneiden

Beitrag von nufan » So Aug 15, 2021 7:36 pm

Hallo darkwin,

Der Beginn von Arrays kann nicht verändert werden, diese Zuweisung ist nicht möglich:

Code: Alles auswählen

text = &textptr - 6;
Kompiliert der Code so bei dir?

Stattdessen kannst du deinen Zeiger "textptr" verwenden, um auf einen Bereich innerhalb des Arrays zu verweisen. Du weist ja bereits den Beginn des Arrays zu, du musst nur noch den abzuschneidenden Bereich berücksichtigen. Wenn du vom Beginn etwas abschneiden willst, solltest du die Größe des Bereichs übrigens addieren, nicht subtrahieren :)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: char array um x Byte von links abschneiden

Beitrag von Xin » Mo Aug 16, 2021 9:31 am

Vielleicht noch als Lösung dazu... Ein Array ist immer ein Speicherblock. Du kannst wie nufan beschreibt jetzt einfach behaupten, der Speicherblock fängt 6 Zeichen später ("rechts") an:

Code: Alles auswählen

textptr = &text[6];
printf("ab 6. Position: %s\n", textptr );
oder Du musst den Speicherblock umkopieren:

Code: Alles auswählen

strcpy( text, &text[6] );
printf("ab 6. Position: %s\n", textptr );
-> strcpy
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: char array um x Byte von links abschneiden

Beitrag von darkwin » Mo Aug 16, 2021 11:21 am

@nufan
Nein mein Code kompiliert nicht.
Aber genauso habe ich den Code im Netz gefunden wo das Abschneiden eines Strings diskutiert wurde.

Ich habe bisher mit anderen Sprachen Programmiert. Da ist das arbeiten mit Chars / Strings etwas, sagen wir mal, komfortabler.

Mein Projekt soll aber nachher auf einem Arduino funktionieren.
Dann werde ich das auf einem anderen Weg vesuchen.

Xin hat mir ja ein Beispiel gegeben.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: char array um x Byte von links abschneiden

Beitrag von Xin » Mo Aug 16, 2021 12:29 pm

darkwin hat geschrieben:
Mo Aug 16, 2021 11:21 am
Ich habe bisher mit anderen Sprachen Programmiert. Da ist das arbeiten mit Chars / Strings etwas, sagen wir mal, komfortabler.
Komfort muss man sich in C verdienen. :-D
Oder in C++. Ich habe dafür selbstgeschriebene Strings, die das können. Aber das will man häufig ja gar nicht, sondern man will in C/C++ ja die Performance halten. Und den Startpunkt zu verschieben, also einfach 6 Zeichen weiter zu gucken kostet quasi nix. Einen neuen String zu generieren kostet Rechenleistung und Speicher. Komfort muss man sich leisten können.
darkwin hat geschrieben:
Mo Aug 16, 2021 11:21 am
Mein Projekt soll aber nachher auf einem Arduino funktionieren.
Und auf einem Ardiono ist das Budget schmal.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten