Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Char Array - char Vergleich

Frage Entwicklung C und C++

Mitglied: yannick-server

yannick-server (Level 1) - Jetzt verbinden

21.10.2010 um 14:06 Uhr, 8868 Aufrufe, 6 Kommentare

Hallo zusammen,
ich habe leider ein Problem beim erstellen von Char-Arrays in C, und dem Vergleich von Chars.

01.
char zeichen[10]; 
02.
    zeichen[1] = a; 
03.
    zeichen[2] = b; 
04.
    zeichen[3] = c; 
05.
    zeichen[4] = d; 
06.
    zeichen[5] = e; 
07.
    zeichen[6] = f; 
08.
    zeichen[7] = g; 
09.
    zeichen[8] = h; 
10.
    zeichen[9] = i; 
11.
    zeichen[10] = j; 
12.
    zeichen.... 
13.
 
14.
    char name; 
15.
    name = "abc"; 
16.
 
17.
    //vergleichen 
18.
    if(name == zeichen[1]+zeichen[2]+zeichen[3]) 
19.
20.
         printf("Ready!"); 
21.
        }
Es gibt einfach keine Übereinstimmung.
Es ist bestimmt sehr einfach, aber ich habe schon halb google durch ohne Erfolg

Da ich noch nicht lange mit C programmiere, wäre ich euch dankbar,
wenn ihr mir ein paar gute Seiten mit Tutorials für C-nennen könntet.

Schonmal vielen Dank
Yannick
Mitglied: elric78
21.10.2010 um 14:43 Uhr
Als erstes solltest du die einzelnen Char's so: 'a' in den Array einfügen.
Zweitens fängt ein Array eigendlich mit zeichen[0] an und geht dann bis zeichen[9].
Vielleicht geht es jetzt, kanns hier leider nicht testen.

Deine Abfrage kommt mir komisch vor. Ich habe sowas früher mit nem Pointer gelernt. Aber aus dem Stand kann ich das nicht mehr
Bitte warten ..
Mitglied: 76109
21.10.2010 um 16:46 Uhr
Hallo Yannick!

anstatt Array
char zeichen[] = { 'A', 'B', 'C', ...};
einfacher so
char zeichen[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
wobei, wie schon erwähnt , bei Offset 0 begonnen wird.

Gruß Dieter
Bitte warten ..
Mitglied: dog
21.10.2010 um 21:09 Uhr
In C gibt es keine Strings.
Das ist eine ganz wichtige Regeln.
Ein String in C ist ein Array aus einzelnen Zeichen, dessen letzter Index ein NUL ist.
Ein Zeichen selbst ist eine Zahl, die erst über eine Zeichentabelle bei der Ausgabe in einen Buchstaben aufgelöst wird.

Die Variable eines Strings in C ist der Pointer auf den Speicherort des ersten Buchstabens.

Entsprechend hast du hier folgendes versucht:

01.
char name = "abc"; 
02.
 
03.
#< name ist jetzt bspw. 0x1 
04.
 
05.
if(name == zeichen[1]+zeichen[2]+zeichen[3]) 
06.
 
07.
#entspricht 
08.
if(0x1 == (97+98+99)) 
09.
 
10.
#entspricht 
11.
if(1 == 294) 
12.
 
13.
#entspricht 
14.
if(0)
und ein if(0) ist per Definition false.

Wenn du zwei Strings in C vergleichen willst, dann über die strcmp-Funktion.
Dazu müssen es aber Null-terminierte Strings und keine Char-Arrays sein.

Einfach und C sind übrigens 2 Sachen, die sich eigentlich ausschließen
Bitte warten ..
Mitglied: yannick-server
22.10.2010 um 08:37 Uhr
Danke für eure Antworten.
Das einfach und C zwei verschiedene Sachen sind hab ich bemerkt,
ich werde trotzdem nicht aufhöhren ;)
Ich habe jetzt mal den gesamten Code mit Fehlermeldung eingefügt.
Ich bekomme es leider einfach nicht zum laufen
01.
#include <stdio.h> 
02.
#include <conio.h> 
03.
#include <string.h> 
04.
 
05.
int main(void) 
06.
{    
07.
    int a, b; 
08.
     
09.
    char zeichen_a, zeichen_b; 
10.
    char  zeichen[] = "abcdefg"; 
11.
    
12.
    char name; 
13.
    name = "de";//[Warning] assignment makes integer from pointer without a cast    
14.
    char zeichen_kette; 
15.
     
16.
    for (a=0; a<6; a++){ 
17.
        zeichen_a = zeichen[a]; 
18.
        for (b=0; b<6; b++){ 
19.
            zeichen_b = zeichen[b]; 
20.
            zeichen_kette = strcat(zeichen_a,zeichen_b);//[Warning] passing arg 1 of `strcat' makes pointer from integer without a cast  
21.
            printf("%c\n", zeichen_kette);        
22.
            if(strcmp(name, zeichen_kette) == 0)//[Warning] passing arg 1 of `strcmp' makes pointer from integer without a cast  
23.
24.
                printf("Ready!"); 
25.
                printf("%c\n", zeichen_kette); 
26.
                getch(); 
27.
                return(0); 
28.
                }  
29.
30.
    
31.
32.
    getch();	 
33.
    return 0; 
34.
35.
 
Bitte warten ..
Mitglied: 76109
22.10.2010 um 16:08 Uhr
Hallo Yannick!

Also, mit:
char name;
wird nur Speicherplatz für ein Zeichen bereitgestellt. Von daher solltest Du für "name" die gleiche Methode, wie in Codezeile 10 (char name[] = "abc..") anwenden.

Und für:
char zeichenkette
wird auch nur Speicherplatz für ein Zeichen bereitgestellt.
Da "zeichenkette" aber hier als Buffer verwendet wird, kannst Du hier Speicherplatz so reservieren
char zeichenkette[20];
Das reicht für 19 Zeichen und ein EndOfString (NullTerminiert)).
Und immer darauf achten, das der Buffer groß genug ist, um alle Zeichen aufzunehmen. Ansonsten würde dies unliebsame Nebeneffekte auslösen z.B. andere Variablen oder eine Rücksprungadresse (Return) zu einer Prozedur überschreiben usw.

Hoffe, ich hab's halbwegs verständlich formuliert?

Gruß Dieter
Bitte warten ..
Mitglied: yannick-server
23.10.2010 um 12:34 Uhr
Zitat von 76109:
Hoffe, ich hab's halbwegs verständlich formuliert?

Hallo Dieter!
Danke sehr gut erklärt, habs verstanden.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Vergleich einer Zeichenfolge in zwei Dateinamen (3)

Frage von hongziehong zum Thema Batch & Shell ...

Server-Hardware
Hp smart array e200i accu austausch (8)

Frage von hansleo zum Thema Server-Hardware ...

Entwicklung
gelöst Array in HTML-Tabelle umwandeln mittels AutoIT (5)

Frage von drnatur zum Thema Entwicklung ...

PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

Heiß diskutierte Inhalte
Hardware
Laptop ins Salzwasser gefallen (18)

Frage von Marcel94 zum Thema Hardware ...

Switche und Hubs
LAG zwischen Cisco SG300 und Dlink DGS1100 herstellen - wie? (13)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Hardware
Lenovo Yoga 500 über angeschlossene USB Tastatur booten (13)

Frage von thomasreischer zum Thema Hardware ...

CPU, RAM, Mainboards
Hardware Fragen (12)

Frage von xaver-2 zum Thema CPU, RAM, Mainboards ...