검색결과 리스트
글
문자열에 대해 조건 판단을 위한 함수가 있다.
isalpha() : 문자이면 TRUE
isacii() : 아스키 문자라면 TRUE
iscntrl() : 제어 문자라면 TRUE
isdigit() : 숫자라면 TRUE
isgraph() : 공백제외하고 인쇄가능한 문자라면 TRUE
isupper() : 대문자라면 TRUE
islower() : 소문자라면 TRUE
[출처] C언어 7|작성자 Ronny
해당 함수를 쓰기 위해서 ctype.h를 참조 해야한다.
임시 parser를 구현하는데 객체의 이름은 숫자로 시작할 수 없다는 제약이 있다고 가정했고 이를 검사하는데 isalpha와 isdigit을 사용했다.
아래 예제는 머 이런식으로 썼다 정도...
1 2 3 4 | if ( isdigit ( *sToken[j] ) ) { j++; } |
'개발관련 > 시스템함수' 카테고리의 다른 글
[toupper][tolower] 소문자,대문자 변환하기 (0) | 2013.12.13 |
---|---|
[trim] trim을 만들어보자 (0) | 2013.12.04 |
[strtok] 문자열을 구분자를 이용하여 분리하기 (0) | 2013.11.19 |
print문으로 출력할 때 자릿수 지정을 외부 인자로 하는 방법 (0) | 2013.11.11 |
[getopt] getopt와 getopt_long을 써보자 (0) | 2013.10.31 |
설정
트랙백
댓글
글
가끔 쓸일이 있는데 자꾸 잊어버려서 기억용으로 기재함.
자릿수 지정을 하는 방법은 아래와 같다.
1 2 3 | printf ( "[%10s]" , argv[0]); printf ( "[%-10s]" , argv[0]); printf ( "[%010s]" , argv[0]); |
위의 결과는 아래와 같다.
[test ]
[000000test]
여기서 내가 자꾸 잊어버리는 자릿수 지정을 인자로 하려고 할때이다.
아래와 같이 아스테릭(*)을 주고 뒤에 인자로 숫자를 주면 된다.
1 | printf ( "[%*s]" , 10, argv[0]); |
'개발관련 > 시스템함수' 카테고리의 다른 글
[toupper][tolower] 소문자,대문자 변환하기 (0) | 2013.12.13 |
---|---|
[trim] trim을 만들어보자 (0) | 2013.12.04 |
[strtok] 문자열을 구분자를 이용하여 분리하기 (0) | 2013.11.19 |
[isdigit] 문자열 검사 함수 is~ (0) | 2013.11.19 |
[getopt] getopt와 getopt_long을 써보자 (0) | 2013.10.31 |
설정
트랙백
댓글
글
오늘 개발을 하다가 디버깅 메시지를 심고 컴파일을 한 뒤 수행을 해보았는데 순서가 보장되지 않는 일이 일어났다.
예제 코드는 아래와 같다.
1 2 3 4 5 | int main() { fprintf (stdout, "[DEBUG] debug1" ); fprintf (stderr, "print1\n" ); } |
결과는 아래와 같다. 예상한대로인가? 나는 당연히 디버그 메시지가 먼저 나오리라 생각했는데...
print1
[DEBUG] debug1
아래는 위와 같은 문제를 해결한 코드이다.
1 2 3 4 5 | int main() { fprintf (stdout, "[DEBUG] debug1\n" ); fprintf (stderr, "print1\n" ); } |
결과를 보자
[DEBUG] debug1
print1
이제 의도한대로의 결과물이 나왔다. 머가 바뀐것인가? 두개의 코드를 비교해보면 달랑 '\n'이 추가되었다.
이런 현상이 발생한 원인은 stdout과 strerr의 차이에서 비롯된다.
[출처] fprintf의 필수 숙지사항|작성자 수환이
다시 작성한 코드에서는 개행문자인 '\n'을 만났기 때문에 의도한대로 출력이 된 것이라고 보인다. fflush 함수를 통해 해결할 수도 있지만 내가 의도한데에는 개행문자만으로 충분하고 그게 맞는듯 하다.
추가로 처음 이 문제를 접했을 당시 컴파일 옵션에 따라 이런식의 문제가 생길 수도 있다고 들었다. 해당 옵션은 지금껏 아무 생각 없이 써오던 '-O[n]' 옵션이다.
-O는 옵티마이저에서 따온듯하고 뒤의 숫자는 레벨을 뜻한다. 0~3까지 있는 줄 알았는데 자료를 찾아보니 더 많은 옵션이 있더라...
해당 옵션에 대해서는 나중에 더 자세히 봐야겠다. 일단은 링크만 해놓기로 하자.
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options
'개발관련 > 기타' 카테고리의 다른 글
개발 시 성능을 고려함에 있어... (0) | 2013.10.31 |
---|---|
명령 인자 처리에 대한 고민... (0) | 2013.10.31 |
라이브러리(오브젝트) 내용 보기 (0) | 2013.10.30 |
(signed) char와 unsigned char의 차이로 인한 구분의 필요성에 대해 (0) | 2013.10.30 |
RECENT COMMENT