+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 15 von 25

Char Array auf Inhalt überprüfen und dementsprechend ändern(Ansi C)

Diskussion über Char Array auf Inhalt überprüfen und dementsprechend ändern(Ansi C) in C und C++ der Kategorie Programmierung; Hallo, ich möchte gerne ein Char Array auf Inhalt überprüfen und dementsprechend ändern. Hintergrund ist folgender: Mit der Funktion (GetTagChar) ...

  1. #1
    Reg.-Benutzer Avatar von Eleu
    Reg.-Datum
    28.02.2009
    Beiträge
    708

    Standard Char Array auf Inhalt überprüfen und dementsprechend ändern(Ansi C)

    Hallo,

    ich möchte gerne ein Char Array auf Inhalt überprüfen und dementsprechend ändern.

    Hintergrund ist folgender:
    Mit der Funktion (GetTagChar) lese ich eine Prozessvariable ein.
    Je nach dem, was in der Prozessvariablen drinsteht, steht in der Variablen "pszProp" (Auch Datentyp: char)
    entweder ein 1 stelliger Wert, ein 2 stelliger Wert, oder ein 3 stelliger Wert drin.
    Also entweder 1 Byte, 2 Byte, oder 3 Byte sind belegt.

    Als Ergebnis soll aber über die Funktion printf immer 6 Byte ausgegeben werden.

    In dem Code Beispiel wird der Char Variable "source" 3 Zeichen übergeben.

    Code Ausschnitt:

    --------------------------------------
    char source[255] = "000";
    char* pszProp = NULL;

    pszProp = GetTagChar("Prozessvariable");

    ggg[255] == strcpy(ggg,pszProp);

    strcat(source,ggg);

    printf(source);

    -----------------------------------------
    Stehen in der Prozessvariable zum Beispiel die Zeichen "123" drin, würde folgendes ausgegeben werden: 000123
    Stehen aber in der Prozessvariablen zum Beispiel die Zeichen "12" drin, würde folgendes ausgegeben werden: 00012

    Es soll dann aber 000012 ausgegeben werden. (Also immer 6 Zeichen).

    Ich müsste also vorher die Prozessvariable auf ihren Inhalt hin überprüfen, und je nach dem was drin steht muss der Variablen "source" entweder 2, 3, oder 4 Nullen übergeben werden.

    Ich bekomm das irgendwie nicht hin.
    Kann mir jemand helfen.

    Gruß
    Eleu
    Was wahr ist, ist weder gut noch böse, sondern einfach wahr !
    Rabindranath Tagore, bengalischer "Alleskünstler" (1861 - 1941), Nobelpreis für Literatur 1913

  2. #2
    Reg.-Benutzer Avatar von Hexagon
    Reg.-Datum
    30.10.2001
    Ort
    bei HH...
    Beiträge
    401

    Frage

    Moin.

    Eine kurze Frage: Warum so umständlich? Wieso nicht die Ausgabe formatieren?
    Offizielles Alt-Mitglied im Club der Schokoholiker und bekennender Knipser
    "Onkel, der den Kindern nur Blödsinn beibringt"
    ------------------------------------
    Fachbegriffe der Informatik
    320: Softwarewartung
    Flags putzen, Strukturen nachrichten und Variablen mit Öl auffüllen. (Hans Bonfigt)

  3. #3
    Reg.-Benutzer Avatar von lilith2k3
    Reg.-Datum
    10.03.2010
    Ort
    Osnabrück
    Beiträge
    828

    Standard

    Zitat Zitat von Hexagon Beitrag anzeigen
    Moin.

    Eine kurze Frage: Warum so umständlich? Wieso nicht die Ausgabe formatieren?
    Und vorher gerne noch in int umwandeln
    Experience is what you get when you didn't get what you wanted.

  4. #4
    Reg.-Benutzer Avatar von Hexagon
    Reg.-Datum
    30.10.2001
    Ort
    bei HH...
    Beiträge
    401

    Frage

    Ähm... wieso? Stehe gerade etwas auf der Leitung...
    Offizielles Alt-Mitglied im Club der Schokoholiker und bekennender Knipser
    "Onkel, der den Kindern nur Blödsinn beibringt"
    ------------------------------------
    Fachbegriffe der Informatik
    320: Softwarewartung
    Flags putzen, Strukturen nachrichten und Variablen mit Öl auffüllen. (Hans Bonfigt)

  5. #5
    Moderator Daily Talk Avatar von Guybrush Threepwood
    Reg.-Datum
    01.09.2002
    Ort
    Melee Island
    Beiträge
    4.413

    Standard

    Weil du AFAIK nur Zahlen so formatiert ausgeben kannst das da eine bestimmte Anzahl führender Nullen angezeigt wird
    Ich bin Guybrush Threepwood, ein mächtiger Pirat!

  6. #6
    Reg.-Benutzer Avatar von Hexagon
    Reg.-Datum
    30.10.2001
    Ort
    bei HH...
    Beiträge
    401

    Grinsen

    Also,
    Code:
    	char *pointer1="1";
    	char *pointer2="12";
    	char *pointer3="123";
    
    	printf(" %06s \n", pointer1);
    	printf(" %06s \n", pointer2);
    	printf(" %06s \n", pointer3);
    gibt mir
    Code:
     000001
     000012
     000123
    aus. Jedenfalls bei mir...
    Offizielles Alt-Mitglied im Club der Schokoholiker und bekennender Knipser
    "Onkel, der den Kindern nur Blödsinn beibringt"
    ------------------------------------
    Fachbegriffe der Informatik
    320: Softwarewartung
    Flags putzen, Strukturen nachrichten und Variablen mit Öl auffüllen. (Hans Bonfigt)

  7. #7
    Reg.-Benutzer Avatar von Eleu
    Reg.-Datum
    28.02.2009
    Beiträge
    708

    Standard

    Zitat Zitat von Hexagon Beitrag anzeigen
    Also,
    Code:
    	char *pointer1="1";
    	char *pointer2="12";
    	char *pointer3="123";
    
    	printf(" %06s \n", pointer1);
    	printf(" %06s \n", pointer2);
    	printf(" %06s \n", pointer3);
    gibt mir
    Code:
     000001
     000012
     000123
    aus. Jedenfalls bei mir...
    Super....vielen Dank Euch allen.

    Werd ich gleich morgen mal ausprobieren.

    Gruß
    Eleu
    Was wahr ist, ist weder gut noch böse, sondern einfach wahr !
    Rabindranath Tagore, bengalischer "Alleskünstler" (1861 - 1941), Nobelpreis für Literatur 1913

  8. #8
    Reg.-Benutzer Avatar von Eleu
    Reg.-Datum
    28.02.2009
    Beiträge
    708

    Standard

    Ach so... eine Frage noch.
    Funktioniert das auch strcat ?
    Ich muss das Ergebnis nicht nur ausgeben, sondern auch in der Variablen "source" weiterverarbeiten.

    Also so:
    -----------------------------------

    char* pszProp = NULL;

    pszProp = GetTagChar("Prozessvariable");
    source[255] == strcpy(source,pszProp);
    strcat(" %06s \n",source);
    printf(source);
    Was wahr ist, ist weder gut noch böse, sondern einfach wahr !
    Rabindranath Tagore, bengalischer "Alleskünstler" (1861 - 1941), Nobelpreis für Literatur 1913

  9. #9
    Moderator Daily Talk Avatar von Guybrush Threepwood
    Reg.-Datum
    01.09.2002
    Ort
    Melee Island
    Beiträge
    4.413

    Standard

    dann scahu dir mal sprintf an, bzw noch besser snprintf
    Ich bin Guybrush Threepwood, ein mächtiger Pirat!

  10. #10
    Reg.-Benutzer Avatar von Hexagon
    Reg.-Datum
    30.10.2001
    Ort
    bei HH...
    Beiträge
    401

    Lachen

    Und btw...
    Code:
    source[255] == strcpy(source,pszProp);
    schaut ziemlich unsinnig aus...
    Offizielles Alt-Mitglied im Club der Schokoholiker und bekennender Knipser
    "Onkel, der den Kindern nur Blödsinn beibringt"
    ------------------------------------
    Fachbegriffe der Informatik
    320: Softwarewartung
    Flags putzen, Strukturen nachrichten und Variablen mit Öl auffüllen. (Hans Bonfigt)

  11. #11
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Zitat Zitat von Hexagon Beitrag anzeigen
    schaut ziemlich unsinnig aus...
    Noch schlimmer, es ist undefiniert.

    @Eleu:
    Überleg bitte mal genau, was source[255] bedeutet:

    source[0] ist das erste Element des Arrays source.
    source[1] ist das zweite Element des Arrays source.
    ...
    Was ist dann source[255]? Ganz klar: Das 256. Element des Arrays source

    Das Array hat aber nur 255 Elemente. Du vergleichst also den Rückgabewert von strcpy mit der Speicherstelle, die hinter deinem Array steht, und das Ergebnis des Vergleichs ignorierst du.
    Geändert von Klotzkopp (14.10.2011 um 07:19 Uhr)
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  12. #12
    Reg.-Benutzer Avatar von Eleu
    Reg.-Datum
    28.02.2009
    Beiträge
    708

    Standard

    Zitat Zitat von Hexagon Beitrag anzeigen
    Und btw...
    Code:
    source[255] == strcpy(source,pszProp);
    schaut ziemlich unsinnig aus...
    Ja, stimmt. Es geht auch einfacher.
    Manchmal braucht man nur mal eben den entscheidenden Hinweis
    Hab es jetzt so gemacht:
    ---------------------------------------------------
    char source[255];
    sprintf(source," %06s \n",GetTagChar("Prozessvariable"));
    printf(source);
    ---------------------------------------------------

    Funktioniert wie gewünscht.

    Nochmals Danke.

    Gruß
    Eleu
    Was wahr ist, ist weder gut noch böse, sondern einfach wahr !
    Rabindranath Tagore, bengalischer "Alleskünstler" (1861 - 1941), Nobelpreis für Literatur 1913

  13. #13
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Zitat Zitat von Eleu Beitrag anzeigen
    Funktioniert wie gewünscht.
    Nur wenn GetTagChar garantiert nichts zurückgibt, das ein Prozentzeichen enthält. So ist es sicherer:

    Code:
    printf("%s", source);
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  14. #14
    Reg.-Benutzer Avatar von Eleu
    Reg.-Datum
    28.02.2009
    Beiträge
    708

    Standard

    Zitat Zitat von Hexagon Beitrag anzeigen
    Also,
    Code:
    	char *pointer1="1";
    	char *pointer2="12";
    	char *pointer3="123";
    
    	printf(" %06s \n", pointer1);
    	printf(" %06s \n", pointer2);
    	printf(" %06s \n", pointer3);
    gibt mir
    Code:
     000001
     000012
     000123
    aus. Jedenfalls bei mir...
    Hallo Hexagon,

    ich könnte noch mal Deine oder Eure Hilfe gebrauchen.

    Und zwar möchte ich bezogen auf das Beispiel die nachfolgende Ausgabe bekommen:

    Code:
     100000
     120000
     123000
    Mit den Ausgabeformaten geht das nicht, oder doch ?
    Vielleicht mit strcat ?

    Gruß
    Was wahr ist, ist weder gut noch böse, sondern einfach wahr !
    Rabindranath Tagore, bengalischer "Alleskünstler" (1861 - 1941), Nobelpreis für Literatur 1913

  15. #15
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Code:
    char* fill = "000000";
    printf(" %s%s \n", pointer1, fill + strlen(pointer1));
    Du musst allerdings sicherstellen, dass der erste String niemals länger als 6 Zeichen wird.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. Ausgabe char-Array
    Von SaJu im Forum Java
    Antworten: 1
    Letzter Beitrag: 13.12.2010, 12:24
  2. Aus String Array in Char Array zum Sortieren
    Von notorious.madeye im Forum C und C++
    Antworten: 5
    Letzter Beitrag: 27.10.2005, 15:44
  3. Variant auf leeren Inhalt überprüfen
    Von Riceman im Forum Basic
    Antworten: 3
    Letzter Beitrag: 26.04.2005, 11:47
  4. Char Array
    Von SwordMaster im Forum C++: Compiler, IDEs, APIs
    Antworten: 2
    Letzter Beitrag: 18.08.2003, 08:00
  5. char-Array to Int
    Von Technician im Forum C und C++
    Antworten: 1
    Letzter Beitrag: 18.10.2002, 15:46

Die häufigsten Suchbegriffe für diese Seite:

char array inhalt überprüfen

char array inhalt prüfen

char[] auf inhalt prüfen

char array auf inhalt prüfen java

string auf inhalt überprüfen rpg

inhalt eines char prüfen