2017-09-06 1 views
1

C에서 문자열이 절대 경로인지 상대 경로인지를 확인하는 매우 간단한 함수를 작성합니다. 아무리 노력해도 항상 false를 반환합니다.문자열의 첫 글자를 C로 확인하기

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

나는 그것을 좋아 전화 : 여기

내가 노력 무슨 때마다 거짓 반환

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

. 분명히 나는 ​​명백한 것을 놓치고있다. 그러나 나는 그것을 이해할 수 없었다. ...

+4

'strcmp' 비교 않을 것이다, 그래서 당신이 전달하는 문자열이 "/"인 경우에만 true를 돌려줍니다 이유, 성공 사례에 제로이다. 'strncmp'를 대신 보거나 문자열 대신에 한 문자 만 비교할 수 있습니다 ('if (str [0] == '/')'). – AntonH

+0

@AntonH : 답변으로 배치하지 않겠습니까? – alk

+0

@alk 나는 왜 그것이 작동하지 않는지에 대해 논평 할 것이지만, 이후에는 해결책을 편집했다. 대답으로 지금 넣어 ... – AntonH

답변

5

컴파일러에 대한 액세스 권한이 없지만 C 스타일의 문자열은 종료가있는 배열이므로 문자 : 비교되는 문자열이 같은 길이의 경우

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

첫 번째 예제는 잘 작동합니다. –

+2

'const char * str'을 사용할 수 있습니다. – alk

+0

감사합니다. Luke. 고등학교 축일 이후 C를하지 않았습니다. –

3

지적 된 바와 같이, strcmp에만 일치합니다.

는 문자열의 맨 앞에 하나의 문자를 비교하기 위해, 당신은 다만 할 수 있습니다 당신이 찾고있는 접두사는 더 이상 하나 개의 문자보다 길 경우

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

, 다음 this은 도움이 될 수 있습니다. 나는 프레드 푸 (Fred Foo)의 대답이 받아 들여진 것보다 낫다. (다수의 유권자들이 그렇듯이).

2

strcmp은 전체 문자열을 비교하므로 전달하는 문자열이 "/"인 경우 함수는 true 만 반환합니다.

당신은 대신에 strncmp 볼 수 있습니다 :

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

또는 하나 개의 문자 비교 : strncmp에 유사

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

인수로 비교하는 바이트 수를 가지고 memcmp을 사용할 수 있습니다 :

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

return va lue $ 0 $는 평등을 의미합니다. 귀하의 코드에서 당신이 의도 한대로 아마 그렇지 않은 경우에는 0을 반환합니다.

0

STRCMP 반환 값은 그것이 전체 문자열 사실

관련 문제