Ein String Problem

OP #4297813
Hallo, ich komme gerade nicht mehr weiter und brauche Hilfe.

Ich habe eine Funktion geschrieben die eine CSV von der SD liest und 
diese in einem "const char *SD_Data[24][2];" Ich müsste zum weiteren 
verarbeiten im Anschluss ein string erhalten das ich in eine int 
umwandeln.
1
char buffer[100] = {0};
2

3
  void Draw_GraphDay()
4
  {  DataFile = SD.open("log.csv");
5
    if (DataFile)
6
    {  
7
      uint8_t ArDim1=0 ;
8
      uint8_t ArDim2=0 ;
9
      nexString:
10
      while (DataFile.available())
11
      {  
12
        String cmd = "";
13
        buffer[100] = {0};
14
        //Suchen nach dem richten String 
15
        
16
        for (uint8_t i =0; i<=12;i++)
17
        {  
18
          buffer[i] = DataFile.read();
19
          cmd += buffer[i];        
20
          
21
          if(buffer[i] == ';')
22
          {
23
          ArDim2++;
24
          }else if( buffer[i] == '\r')
25
          {
26
          ArDim2=0;
27
          ArDim1++;
28
          }
29
            SD_Data[ArDim1][ArDim2] = cmd.c_str();
30
            Serial.print(SD_Data[0][0]);
31
            while(true);
32
            goto nexString;
33
        }
34
      }
35
    } 
36
    else
37
    {
38
      Serial.println("!!!!!!");
39
    }
40
  
41
  
42
  }

jetzt greif ich aber bisher nur auf das erste char zu und nicht auf dem 
ganzen array of char was ja wiederum mein String wäre. wie erhalte ich 
jetzt wieder ein string ?

gedacht hätte ich das ich mit  "Serial.print(cmd)" mein string erhalte 
dem ist leider nicht so!!!
Gast
const char *SD_Data[24][2];

einen const etwas zuweisen, halte ich auch nicht für sinnvoll.

SD_Data[ArDim1][ArDim2] = cmd.c_str();

das schlimme daran ist, das cmd später nicht mehr da ist, dann zeigt der 
Zeiger ins nichts.
OP
qwertzuiopü+ schrieb:
>>goto
>
> Autsch... An der Stelle würde es ein einfaches break genauso tun. Nur
> zwanzigmal so elegant.

Sry das war bzw ist noch ein überbleibsl vom testen und der Fehler 
suche, es sollte natürlich ein break sein.
Zum Thema while(true) kann ich das selbe sagen.

@Peter wie meinst du das ?

Ich hab eine CSV in der Form

1443823256;20;20
1443826856;21;21
1443830456;23;23
1443834056;23;23

mit

SD_Data[0][1] will ich zb auf den Wert 20 zugreifen.
Gast
SD_Data[ArDim1][ArDim2] = cmd.c_str();

Was willst du mit dieser Zeile erreichen?
cmd.c_str() liefert dir einen Zeiger auf ein Char-Array.
Wenn du die Daten kopieren willst, musst du das auch machen. z.b. mit 
memcpy oder strcpy ...
Gast
D. C. schrieb:
> @Peter wie meinst du das ?

ich weiß nicht mal wo ich anfangen soll. Dir fehlen (scheinbar) die 
kompletten Grundlagen.

cmd ist ein Objekt, c_str() davon liefert dir einen Zeiger auf die 
internen Daten von diesen Objekt. Nach dem du das objekt aber änders 
oder den Gültigkeitsbreich verlässt, darf man nicht einfach auf den 
Zeiger zugreifen.

Das einfachste ist wenn man
1
String SD_Data[24][2]

und dann
1
SD_Data[ArDim1][ArDim2] = cmd;

macht, aber das ist sehr aufwendig für einen µC.
OP
mike schrieb:
> SD_Data[ArDim1][ArDim2] = cmd.c_str();
>
> Was willst du mit dieser Zeile erreichen?
> cmd.c_str() liefert dir einen Zeiger auf ein Char-Array.
> Wenn du die Daten kopieren willst, musst du das auch machen. z.b. mit
> memcpy oder strcpy ...

Ich hätte gedacht wenn ich die Startadresse übergebe würde es klappen. 
Ich muss auch zugeben mit String objects hab ich noch nie was gemacht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 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.