2017-07-23 130 views
1

我想查看一個字符串是否等同於一個URL路徑。它應該很簡單,但strcmp總是返回< 0(-47)。我可能在斜槓上做錯了什麼。C使用strcmp來檢查URL路徑

#include <stdio.h> 
#include <string.h> 
#include <stdbool.h> 

int main() 
{ 
    char path[9]; 
    strcpy(path, "/my/path/"); 
    int len = strlen(path); 

    char lastChar[1]; 
    strcpy(lastChar, &path[len - 1]); 
    printf("LAST CHAR SET TO %s\n", lastChar); 

    bool isPageRequest = strcmp(lastChar, "/") == 0; 
    if(isPageRequest) 
    { 
     printf("ITS A PAGE REQUEST\n"); 
    } 

    bool isMyPath = strcmp(path, "/my/path/") == 0; 
    if(isMyPath) 
    { 
     printf("ITS MY PATH PAGE\n"); 
    } 

    return 0; 
} 

我期待ITS MY PATH PAGE打印出來..但它沒有。

回答

3

複製最後一個斜槓的數組太短:char lastChar[1];它應該至少有2個大小以接收空終止符。

你實際上並不需要一個數組,只是比較最後一個字符與'/'可以直接完成。

對於path,您有相同的錯誤,但對於"/my/path/"來說太短了。

超出數組末尾的複製具有未定義的行爲,這意味着可能發生任何事情,包括巧合地包括您實際期望的行爲。

試試這個修改後的版本:

#include <stdio.h> 
#include <string.h> 
#include <stdbool.h> 

int main(void) { 
    char path[] = "/my/path/"; 
    int len = strlen(path); 
    char lastChar = path[len - 1]; 

    printf("LAST CHAR SET TO %c\n", lastChar); 

    bool isPageRequest = lastChar == '/'; 
    if (isPageRequest) { 
     printf("IT'S A PAGE REQUEST\n"); 
    } 

    bool isMyPath = strcmp(path, "/my/path/") == 0; 
    if (isMyPath) { 
     printf("IT'S MY PATH PAGE\n"); 
    } 
    return 0; 
} 
+0

我明白這一點。我不明白的是爲什麼這會使代碼的其餘部分工作.. –

+0

@JDoe .:未定義的行爲是不正當的,它可能會讓你覺得你修復了一個bug,然後讓你想知道如何? – chqrlie