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, 8747 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
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

Netzwerke
VPN DHCP IPSec im Vergleich zu L2TP over IPSec (1)

Frage von TomJones zum Thema Netzwerke ...

Festplatten, SSD, Raid
Vergleich zweier SSD-Typen im Raid-10 für den Anwendungsfall SQL-Datenbank (8)

Frage von DerWoWusste zum Thema Festplatten, SSD, Raid ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...