Ergebnis 1 bis 6 von 6

Thema: Probleme mit Strings in C

  1. #1

    Probleme mit Strings in C

    joa, nun ist es wohl oder übel so weit. Ich muss nun in der Schule C lernen.
    Dank meiner derzeitigen Erkrankung musste ich auch eine C Vorlesung ausfallen lassen und da wurde auch wohl das behandelt, wo ich grad bescheitere. Also:

    Wir sollen ein Programm schreiben, was auf einen Parameter reagieren soll.
    Dafür muss ich herausfinden, ob es sich um eine Hex-Zahl (0x...) oder um eine Dezimalzahl handelt.
    Nun wollte ich einen String definieren, der zwei Zeichen lang ist, um dort die ersten beiden Zeichen des Parameters zu speichern. Wir sollen dafür sscanf() benutzen.

    Alles schön und gut aber ich bekomm es irgendwie nicht hin, einen String zu definieren. Hab da schon mein schlaues Buch gewälzt und bin nun auf folgenden Code gekommen:
    Code (C):
    #include <stdio.h>
     
    int main (int argc, char * argv[]) {
      char x[2];
     
      if (argc == 2) {
        sscanf(argv[1], "%s", &x);
        printf("%s", x);
      }
      return 0;
    }

    Allerdings meldet der Compiler den Fehler "warning: char format, pointer arg (arg 3)" (In Zeile 9)
    Was mache ich hier falsch?

  2. #2
    x selber ist schon ein Pointer. Du übergibst somit den Pointer auf den Pointer auf den Start der Array. Ausserdem musst du darauf achten, dass x zu kurz wäre, am Ende würde ja noch ein \0 hinzugefügt werden. Daher solltest du char x[3]; verwenden und dann bei sscanf "%2s" damit nicht versucht wird zuviel unter x abzuspeichern.

    Edit: Dafür versteht man es bei dir wenigstens.

    Geändert von Drakes (22.10.2009 um 00:14 Uhr)

  3. #3
    Mir fallen spontan drei Fehler auf.

    1. Dein String x ist nur 2 Zeichen lang. Du brauchst 3 Zeichen, weil die meisten Funktionen in C ein 0-Byte als Markierung für das Stringende erwarten.
    2. Das zweite Argument von sscanf müsste "%2s" lauten, um einzuschränken, dass du nur 2 Zeichen lesen willst. Sonst könntest du evtl. Probleme mit Überläufen kriegen.
    3. Der letzte Parameter sollte x sein und nicht &x. Ein String (bzw. eigentlich ein char-Array) ist intern ja schon ein Pointer auf das erste Zeichen. Da musst du nicht noch einen Pointer draus machen. Daher kommt die Fehlermeldung


    Edit: blargh... zu langsam.

    Geändert von DFYX (22.10.2009 um 00:16 Uhr)

  4. #4
    ah, danke sehr. Nun läuft es auch.

  5. #5
    Im Übrigen kannst du das auch einfacher überprüfen:

    Code:
    if(argv[1][0] == '0' && argv[1][1] == 'x')
    oder noch einfacher:

    Code:
    if(strncmp(argv[1], "0x", 2) == 0)
    Dann sparst du dir den sscanf Kram.

  6. #6
    Zitat Zitat von DFYX Beitrag anzeigen
    Dann sparst du dir den sscanf Kram.
    Darüber läuft schon seit Bekanntgabe der Aufgabe eine hitzige Diskussion aber wir sollen sscanf benutzen um zu lernen, wie dieser Befehl funktioniert.
    Wäre mir auch lieber, wenn ich darauf verzichten könnte.

Berechtigungen

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