2017-09-06 2 views
1

Ich schreibe eine sehr einfache Funktion in C, um zu überprüfen, ob eine Zeichenfolge ein absoluter Pfad oder ein relativer Pfad ist. Egal, was ich versuche, es kommt immer falsch zurück. HierÜberprüfen des ersten Buchstabens einer Zeichenfolge in c

ist, was ich versucht habe:

int isAbsolute(char *str){ 
    if(strcmp(str,"/")){ 
     return 1; 
    } 
    return 0; 
} 

und ich nenne sie mag:

printf("%d\n", isAbsolute("/")); 

, die jedes Mal falsch zurückkehrt. Offensichtlich fehlt mir etwas offensichtlich, aber ich konnte es nicht herausfinden ...

+4

'strcmp' gehen vergleicht die gesamte Zeichenkette, so wird es nur true zurück, wenn die Zeichenfolge Sie vorbei„/“ist. Sie können stattdessen 'strncmp' betrachten oder nur ein Zeichen (' if (str [0] == '/') ') anstelle einer Zeichenkette vergleichen. – AntonH

+0

@AntonH: Warum nicht als Antwort platzieren? – alk

+0

@alk Ich wollte nur kommentieren, warum es nicht funktionierte, aber nachher eine Lösung editiert. Stellen Sie es als Antwort jetzt ... – AntonH

Antwort

5

Haben keinen Zugriff auf einen Compiler, aber ich denke, das wird funktionieren, weil C-Stil-Strings nur Arrays mit einem Abschluss sind Charakter:

int isAbsolute(const char *str){ 
    return (str[0] == '/'); 
} 
+0

Ihr erstes Beispiel funktioniert gut –

+2

Sie könnten 'const char * str' verwenden. – alk

+0

Danke Luke. Habe seit der High School nicht mehr gemacht. –

3

Wie, strcmp paßt nur darauf hingewiesen, wenn die Saiten sind von gleicher Länge verglichen werden.

Um ein einzelnes Zeichen an der Vorderseite des Strings zu vergleichen, können Sie einfach tun:

int isAbsolute(const char *str) { 
    return (str[0] == '/'); 
} 

Wenn das Präfix Sie suchen, ein Zeichen länger ist als, helfen this könnte dann. Ich mag die Antwort von Fred Foo besser als die, die akzeptiert wurde (wie die Mehrheit der Wähler).

2

strcmp vergleicht die gesamte Zeichenfolge, so dass Ihre Funktion nur true zurückgibt, wenn die übergebene Zeichenfolge "/" ist.

Sie bei strncmp aussehen kann statt:

if(strncmp(str,"/", 1)) ... 

oder vergleichen nur ein Zeichen:

(if (str[0] == '/')) ... 
1

Ähnlich strncmp können Sie memcmp verwenden, die die Anzahl von Bytes hat als Argument zu vergleichen:

int isAbsolute(const char *str){ 
    if (0 == memcmp(str, "/", 1){ 
     return 1; 
    } else { 
     return 0; 
    } 
} 

Vergessen Sie nicht, dass Rückkehr va Lue $ 0 $ bedeutet Gleichheit. In Ihrem Code geben Sie in diesem Fall 0 zurück, was wahrscheinlich nicht Ihren Vorstellungen entspricht.

0

STRCMP Rückgabewert ist Null auf Erfolgsfall, das ist, warum es nicht wahr

Verwandte Themen