2014-02-06 8 views
4

사용자가 입력 한 문자열이 asdfgh\hj이라고 가정하고 문자열에서 \ 문자의 색인을 찾고 싶습니다. C에서 어떻게 할 수 있습니까?C에서 문자열에서 ''문자를 찾는 방법은 무엇입니까?

strchr()의 기능을 시도했지만 strchr("asdfgh\hj",'\')으로 컴파일러에서 오류가 발생했습니다.

그럼 나는 == 연산자를 사용했지만 동일한 문제가 발생했습니다. 다시 컴파일러에서 오류가 발생합니다.

답변

6

나는 strchr("asdfgh\hj",'\')strchr() 기능을 시도했지만 컴파일러에서 오류 올바른 함수의

가 발생합니다! 오류가 발생하는 이유는 \이 특별한 "이스케이프"문자이기 때문입니다. 개행 문자 "\n"과 같이 "특수한"인쇄 할 수없는 문자를 정의하는 데 사용됩니다.

strchr("asdfgh\\hj",'\\') 
+0

Bro이 문자열은 런타임에 사용자가 입력합니다. 그는 "asdfgh \ hj"라고 입력했다고 가정합니다. 그러면 어떻게 "asdfgh \\ hj"로 바꿀 수 있습니까? @dasblinkenlight – ranaarjun

+1

@ranaarjun 사용자가 문자열을 입력 한 경우 아무 것도 변경할 필요가 없습니다. 슬래시는 컴파일러에서만 이스케이프해야합니다. 따라서'strchr (userString, '\\')'을 호출하면 정확한 위치에 대한 포인터를 얻을 수 있습니다. – dasblinkenlight

+1

@ranaarjun 컴파일러에서 오류가 발생했습니다. 문자열이 사용자에 의해 입력되면 오류는 아마도 이스 케이 핑과 관련 될 수 없습니다. 따라서 원래 게시물을기만하는 것뿐만 아니라 실제로 발생한 오류를 표시해야합니다. –

1

이 시도 :

strchr("asdfgh\\hj",'\\') 
+2

잘못된 경우 : 건초 더미가 이스케이프해야합니다. –

+0

@DavidGiven 죄송합니다. 고침, 고맙습니다 :) – Agis

1

C 표준은 말한다, C11 6.4.4.4 :

이중 따옴표 "와 물음표 ? 그 자체로 하나 표현할 수있는이 같은 탈출해야 \ 백 슬래시 자체가 이유입니다 또는 각각 이스케이프 시퀀스 \"\?으로 표시해야하지만 작은 따옴표 '과 백 슬래시 \ 은 각각 이스케이프 시퀀스으로 표시해야합니다210 및 \\.

그래서 대신

strchr("asdfgh\\hj",'\\') 

를 사용합니다.

+2

문자열의 백 슬래시는'\ h'로 간주됩니다 나는 투표하지 않았다). – rullof

+0

@ rullof; 죄송합니다. 감사. +1 그 :) – haccks

1

C에서 백 슬래시는 \n과 같은 하드 타이핑 된 문자에 사용됩니다. 그래서 당신은 \ 자체에 대한 \\를 작성해야합니다 : 문자열에 당신이 \ 또한 그렇지 않으면 의미가 없습니다 \h으로 간주됩니다 \\를 writen해야 할 것으로

char *backslash = strch("some text containing \\ ...", '\\'); 

참고.