webentwicklung-frage-antwort-db.com.de

C Vergleich von Zeigern (mit Zeichen)

Guten Abend, ich habe 2 Funktionen und jede von ihnen akzeptiert einen Zeiger auf char:

char pointer[255];
func1(char* pointer)
{
...
memcpy(pointer,some_char,strlen(something));
return;
}
func2(char* pointer)
{
...
if (pointer==someother_char) exit(0); //FAILs
//also I have
if(pointer==someother_pointer2char); // FAILs
}

Jetzt habe ich versucht, strstr, strcmp etc ... funktioniert nicht. Wollte versuchen memcmp aber ich habe keine statischen len. Da ich char * mit char und char * mit char * vergleichen muss würde ich zwei Lösungen brauchen, oder?

Wie kann man diese Zeiger (tatsächlich Pointees) auf kürzest mögliche Weise vergleichen?

Vielen Dank.

E D I T

Dank Wallacer und Code Monkey jetzt für Char * to Char-Vergleich verwende ich Folgendes:

func1(char* ptr){
char someother_char[255];
char *ptr_char = NULL; //I have to strcmp a few values so this is why I initialize it first
... 
ptr_char = someother_char;
if (strcmp(ptr,ptr_char) == 0) //gtfo and it does...
...
ptr_char = some2nd;
if(strcmp...

Irgendwelche Vorschläge vielleicht ... (hmm externe Funktion zum Vergleichen?)

Vorschlag1 (von Code Monkey)

#include <stdio.h>

int main(void) {
    char tempchar[255];
    tempchar[0] = 'a';
    tempchar[1] = 'b';
    tempchar[2] = '\0';
    char *ptr_char;
    ptr_char = &tempchar[0];
    printf("%s", ptr_char);
    return 0;
}
12
cat9

Sie müssen strcmp verwenden. Wenn Sie nicht sehen, wie Sie versucht haben, es zu verwenden, sollten Sie es so verwenden:

char *someother_char = "a";
char *pointer = "a";

if (strcmp(pointer, someother_char) == 0) { // match!
}
else { // not matched 
}

um dann den Vergleich mit einer char durchzuführen, müssen Sie zu einem char* aufsteigen:

char *someother_char1;
char test = 'a';
char *pointer = "a";

strncpy((char*)test,someother_char1,sizeof(test));

if (strcmp(pointer, someother_char1) == 0) { // match!
}
else { // not matched 
}

wenn Sie char array verwenden möchten, müssen Sie die Referenz aufheben:

char char_array[255];
// don't forget to fill your array
// and add a null-terminating char somewhere, such as char_array[255] = '\0';
char *ptr_somechar = &char_array[0];
char *pointer = "a";

if (strcmp(pointer, ptr_somechar) == 0) { // match!
} else { // not matched
}
20
user195488

Wenn Sie die Spitzenreiter vergleichen möchten, müssen Sie sie dereferenzieren. Um den tatsächlichen Char-Wert zu vergleichen, müssen Sie ihn anrufen 

if (*pointer == someother_char)

Dabei wird jedoch nur das erste Zeichen im Array verglichen. Dies ist wahrscheinlich nicht das, was Sie tun möchten.

Um das Ganze zu vergleichen sollte strcmp funktionieren 

char* someother_str = "hello strstr";
if(strcmp(pointer, someother_str) == 0) {
    // do something
}

Stellen Sie sicher, dass Ihre andere Zeichenfolge als Char deklariert ist * 

Weitere Informationen: http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

Bearbeiten: wie in Ihrem Kommentar. Char * und Char zu vergleichen macht eigentlich keinen Sinn. Einer ist ein Zeichenwert, der andere ist eine Adresse im Speicher. Tun Sie dies, können Sie entweder das char * dereferenzieren oder die Wertvariable referenzieren.

char c;
char* ptr;

// dereference ptr
if ( c == *ptr ) {
   ...
}

// reference the value
if ( &c == ptr ) {

}

Die erste Methode prüft, ob die Werte gleich sind. Die zweite prüft, ob ptr tatsächlich auf den Speicher zeigt, der c enthält. ist ein Zeiger auf c

Hoffentlich hilft das

1
wallacer

Verwenden Sie die Funktion srtncmp no srtcmp.

int res = strncmp(str, "¿Cuál es tu nombre? ", 100);

Siehe den nächsten Link 

vergleiche Strings

0
Ronald