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;
}
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
}
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
Verwenden Sie die Funktion srtncmp no srtcmp.
int res = strncmp(str, "¿Cuál es tu nombre? ", 100);
Siehe den nächsten Link