Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: yannick-server

yannick-server (Level 1) - Jetzt verbinden

21.10.2010 um 14:06 Uhr, 9592 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 ..
Ähnliche Inhalte
Batch & Shell

In Batch eine Text Variable und ein Array vergleichen

Frage von DrMarksmanBatch & Shell5 Kommentare

Hallo Leute! Ich habe mich wieder zu meinen Ursprüngen des Programmierens zurück begeben und bin dabei ein kleines Programm ...

Batch & Shell

PowerShell zwei Array mit unterschiedlichem Inhalt vergleichen

Frage von derhoeppiBatch & Shell7 Kommentare

Hallo, folgende Aufgabe muss ich in einem Skript zur Administration eines Storagesystems lösen. Mit einem Befehl lese ich die ...

Batch & Shell

Hex DEC Char ???

gelöst Frage von dax4funBatch & Shell7 Kommentare

Hi, nachdem ich es irgendwie geschaft habe einen Befehl an einen Bon Drucker zu senden siehe: kann mich wer ...

Batch & Shell

Leere Array-Werte aus einem Array entfernen

gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

Neue Wissensbeiträge
Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 7 StundenSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 7 StundenMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Hardware

Feueralarm killt Festplatten in Rechenzentrum - führt zu größerem Ausfall

Information von kgborn vor 7 StundenHardware10 Kommentare

Noch ein kleiner Beitrag für Administratoren, die in Rechenzentren aktiv sind - so als Fingerzeig. Denn es gibt Szenarien, ...

MikroTik RouterOS

Mikrotik Advisory: Vulnerability exploiting the Winbox port

Information von colinardo vor 7 StundenMikroTik RouterOS

Brand aktuell: Eine Schwachstelle im Winbox-Port bei Mikrotik Routern erlaubt das Auslesen der User-Datenbank der Router. Patch ist aktuell ...

Heiß diskutierte Inhalte
Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux23 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL16 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...

Windows Server
Domänencontroller trennen
Frage von Akit57Windows Server13 Kommentare

Hallo, ich hoffe das mir hier jemand meine Frage trotz der spärlichen Informationen die ich geben kann beantworten kann: ...

Router & Routing
Gesichertes NTP, wie z.B. NTPsec oder andere Variante bei Fritzboxen möglich ?
Frage von BruniumRouter & Routing11 Kommentare

Aktueller Zustand: Verwendung von ungesicherten NTP mit Fritzbox Gewünschter Zustand: Verwendung von gesicherten NTP mit Fritzbox Frage: Was gibt ...