- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Wo ist der Fehler??

  1. #1
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063

    Wo ist der Fehler??

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    Ich möchte folgendes machen:
    Einen String definieren
    Code:
    unsigned char text[10];
    diesen initialisieren
    Code:
    text[0]="1234567890";
    (wenn ich die null in den klammern weglasse, dann kommt ein fehler beim kompilieren.)

    dann eines der zeichen in eine neue variable speichern
    Code:
    value=text[0];
    und diese dann per serwrite ausgeben.
    Code:
    SerWrite(value,1);
    das oben genannte beispiel funktioniert auch ganz gut. es wird über minicom (ist wie hyperterminal für linux) korrekt eine 1 ausgegeben.

    Folgendes problem: sowie ich die Zeile
    Code:
    value=text[0];
    ändere und z.B. text[1] oder text[2] ausprobiere, kommen bei minicom nur komische zeichen an.
    und zwar immer die gleichen! bei test[1] sind es punkte (.), bei test[2] sind es akzente(´) usw.

    Wie kann das sein? beim ersten zeichen gehts, beim nächsten nicht mehr...
    die variable value ist übrigens ebenfalls ein unsigned char.

    vielen dank leute...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    33
    Beiträge
    485
    Naja du weist die Zahlen von 1-9 eben nur dem ersten Element des Arrays (text[0]) zu. Damit die Zahlen jeweils nem anderen Element zugewiesen werden musst du es entweder so:
    Code:
    char text[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    oder mit einer Schleife initialisieren.
    Die komischen Werte hast du übrigens erhalten, weil du dem jeweiligen Element keinen Wert zugewiesen hast.

    MfG

  3. #3
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    aber ich habe nicht 1234567890 sondern "1234567890" zugewiesen, also einzelne zeichen als string.
    im ersten zeichen ist auch keine (zahl) 1, sondern das ASCII-zeichen "1", bzw der zahlenwert 49.

    wenn ich das array so initialisieren würde, wie du es beschrieben hast, dann würde im ersten feld der zahlenwert 1 stehen, was dem ascii-zeichen SOH entsprechen würde, einem steuerzeichen welches nicht ausgegeben werden kann.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    33
    Beiträge
    485
    Achja stimmt, übersehn dass es ein Char array is. Versuch mal anstatt mit text[] = "12345" mit text = "12345", also ohne die KLammern. So müsste es gehn glaub.

    MfG

  5. #5
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    wird probiert...
    geht leider nicht, ausgabe:
    Code:
    test.c: In function ‘main’:
    test.c:51: error: incompatible types in assignment
    test.c:54: warning: passing argument 1 of ‘SerWrite’ makes pointer from integer without a cast
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hab grad probiert, wenn ich jedes element einzeln initialisiere
    Code:
    text[0]=1;
    text[1]=2;
    ...
    und so weiter, dann gehts.

    also: wie initialisiert man einen string???
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Vielleicht so :
    Code:
    char string[] = "Ich bin ein String";
    Zugriff:
    Code:
    printf("%s,%c",string,string[0]);
    char *pointer = string;
    
    while (*pointer) {
      printf("%c",*pointer++);
    }
    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    geht leider nicht, der compiler meldet dass er einen ausdruck zwischen den klammern erwartet... egal, ich habe mich jetzt damit abgefunden dass ich die werte nur einzeln aufrufe. eigenartig, das ist das erste was ich sehe was unter windoof einwandfrei geht und unter linux nicht... sieht so aus als ob die kompiler zu unterschiedlich sind...

    noch was neues:

    wenn ich eine variable mit char definiere
    Code:
    unsigned char value=0;
    und dieser dann einen Wert zuweise
    Code:
    value="A";
    dann kommt eine WARNING im compiler:
    Code:
    test.c:9: warning: assignment makes integer from pointer without a cast
    wenn ich die anführungszeichen " durch einzelne ' ersetze, wie es bei MSVC normal ist, dann geht es gar nicht. das programm wird kompiliert, allerdings kann der wert zB mit SerWrite nicht ausgegeben werden.also habe ich die " gelassen.
    wenn ich jetzt versuche, das zeichen auszugeben, und zwar mit
    Code:
    SerWrite(value,1);
    dann wird das zeichen korrekt ausgegeben, aber es kommt eine weitere warning:
    Code:
    test.c:12: warning: passing argument 1 of ‘SerWrite’ makes pointer from integer without a cast
    Warum? Also das Programm funktioniert einwandfrei...

    Ich vermute dass es an den Anführungszeichen liegt, die ja einen string definieren, welcher in C ja als pointer gehandhabt wird. wenn ich die anführungszeichen durch ' ersetze, dann verschwindet die erste warning. allerdings wird dann nichts mehr ausgegeben in minicom.

    vielleicht poste ich das programm mal nachher, wäre gut wenn das mal jemand testen könnte.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    geht leider nicht, der compiler meldet dass er einen ausdruck zwischen den klammern erwartet
    Was erwartet der ?
    Quatsch, wie will ich sonst ein char Array initialisieren, als so wie vom mir genannt.

    wenn ich eine variable mit char definiere
    Code: [View More of this Code] [View Even More of this Code] [View Less of this Code] [Select All of this Code]
    unsigned char value=0;

    und dieser dann einen Wert zuweise
    Code: [View More of this Code] [View Even More of this Code] [View Less of this Code] [Select All of this Code]
    value="A";

    dann kommt eine WARNING im compiler:
    Mach dir den Unterschied zwischen "A" und 'A' klar...


    Gruß Sebastian

    EDIT:
    wenn ich die anführungszeichen " durch einzelne ' ersetze, wie es bei MSVC normal ist, dann geht es gar nicht. das programm wird kompiliert, allerdings kann der wert zB mit SerWrite nicht ausgegeben werden.also habe ich die " gelassen.
    Du weißt aber was SerWrite als Parameter erwartet ?
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    SerWrite erwartet einen string, is klar. wenn ich hier die 0 in den klammern weglasse, und also test[] hinschreibe was ja ein string bzw ein pointer ist, dann meldet der compiler, genau wie oben bei der initialisierung, dass er einen ausdruck zwischen den klammern erwartet. so wie du es geschrieben hast, geht es NICHT.

    hier siehst du code und compiler-ausgabe.
    http://www.bildrian.de/n/b/d1620e5062db1eeb.png
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test