| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: CPP: Gleich und doch nicht gleich im Forum Code Kitchen, in der Kategorie Software Home; hallo ich habe folgendes problem: wenn ich mit RegQueryValueEx den Wert von einem RegEintrag hole (REG_SZ), und das dann vergleiche ...
![]() |
| | #1 (permalink) |
| Guest Likes: | hallo ich habe folgendes problem: wenn ich mit RegQueryValueEx den Wert von einem RegEintrag hole (REG_SZ), und das dann vergleiche mit einem char der eigentlich genau denselben inhalt hat wie der RegEintrag, wenn ich das mit if( x == y) vergleiche, und es eigentlich wirklich genau dasselbe ist, wird immer so gehandelt als wäre es ungleich. woran liegt das / wie müsste der quellcode aussehen damit ich korrekt einen Registry Wert mit einem anderem char vergleichen kann? |
|
| | #2 (permalink) |
| Registriert seit: 05.04.04 ![]() Likes: 0 | ich denke mal, in deinem beispiel sind x und y char-arrays, d.h. deren typ ist char* oder char[]... wenn man sich jetzt mal klar macht, was die beiden sind, dann ist das problem sofort klar: es sind beides zeiger, die auf verschiedene speicherstellen zeigen. dabei ist egal, was dort steht, ein x == y vergleicht immer nur die zeiger selbst... und lösen kannst du das ganze, indem du (soweit es möglich ist) die char-arrays durch std::string ersetzt... damit sparst du dir eine menge ärger und auch der vergleich mit dem operator == ist dadurch möglich... |
| | |
| HaBOT | |
| |
| | #3 (permalink) |
| Registriert seit: 02.11.04 ![]() Likes: 0 | Oder fals man unbedingt auf std::string verzichten will kann man auch einfach ne Schleife machen die jeden Array-Eintrag vergleicht. Dann noch ne bool-Varibale die bei einem Fehler auf "false" gesetzt wird und schon klapps wunderbar. ;-) Allerdings sehr umständlich, müsstest du halt in ne Funktion packen. |
| | |
| | #4 (permalink) | |
| Guest Likes: | Zitat:
if ( x[1] == y[1] ) { if ( x[2] == y[2] ) { und so weiter......}} oder? | |
|
| | #5 (permalink) | |
| Registriert seit: 06.08.02 ![]() Likes: 0 | Zitat:
Bla. int memcmp ( const void * buffer1, const void * buffer2, size_t num ); Cheers, Ray. | |
| | |
| | #6 (permalink) |
| Registriert seit: 05.04.04 ![]() Likes: 0 | naja, für "strings" gibts wenn dann noch strncmp... auch wenn memcmp sicher gehen würde, strncmp wäre die passendere lösung allerdings wüsste ich keinen grund, wieso man auf std::string verzichten sollte... |
| | |
| | #7 (permalink) | |
| Registriert seit: 06.08.02 ![]() Likes: 0 | Zitat:
| |
| | |
| | #8 (permalink) |
| Registriert seit: 05.04.04 ![]() Likes: 0 | schneller? denk ich eher nicht... aber einfacher zu handhaben |
| | |
| | #9 (permalink) |
| Registriert seit: 06.08.02 ![]() Likes: 0 | Wenn ich mir das bounds checken vor dem Vergleich spare, sehe ich das als schneller an. Aber das ist wohl Ansichtssache... Cheers |
| | |
| | #10 (permalink) |
| Registriert seit: 05.04.04 ![]() Likes: 0 | memcmp macht immer einen vergleich, um nicht schon am ende zu sein... strncmp macht dies auch und zusätzlich noch den test auf '\0'... dürfte also eher nicht schneller sein |
| | |
| | #11 (permalink) |
| Registriert seit: 06.08.02 ![]() Likes: 0 | Ich habe nicht gesagt, daß der Vergleich selbst schneller ist. Wenn ich zwei Strings mit strncmp vergleiche, kann es mir eigentlich egal sein, wie gross ich den Bereich wähle, da ja eh nur höchstens bis zum Terminator geprüft wird. Daher muss ich vorher nicht extra prüfen bzw. speichern, wie lang meine Zeichenkette(n) ist/sind. Ich kann im faulsten Fall sogar einfach die größte mögliche Länge eines Strings in meinem Problem angeben. Bei memcmp wird jedoch u.U. der komplette Bereich überprüft. Das heisst: in diesem Falle und wenn hinter dem Terminator noch weitere Daten stehen, und der Bereich größer ist als der Abstand vom ersten Zeichen bis zum Terminator, wird das Ergebnis verfälscht. Deswegen muss ich irgendwie sicherstellen, daß nur bis zum Terminator überprüft wird, also muss ich extra Code einbauen, der das bewirkt. Das kostet je nach Problem mehr oder weniger Zeit. Im Allgemeinen bekommt man das mit strncmp/strcmp dann schneller. Das hängt natürlich auch vom Problem und den Eingaben und man kann sicher Fälle für oder gegen diese Aussage konstruieren, aber im Allgemeinen wird das schneller laufen. Das weiss ich aus leidvoller Erfahrung mit Mooshak. |
| | |
| | #12 (permalink) | ||
| Registriert seit: 05.04.04 ![]() Likes: 0 | Zitat:
Zitat:
| ||
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Pc geht an und gleich wieder aus | solemboom | Die Problemzone | 5 | 20.02.07 22:17 |
| .avi gleich auf DVD?? | King | Music- & Filmbox | 0 | 17.04.04 15:07 |
| Gleich mal 2 Fragen !! | nebula | Music- & Filmbox | 2 | 07.10.03 16:23 |
| gleich 2 probleme auf einmal | Bobbal | Windows | 4 | 25.08.03 17:50 |
| neudabei & gleich was fragen... | [generic] | (In)security allgemein | 4 | 15.11.01 09:54 |