승진이의 세상 살아가는 이야기  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'c'에 해당하는 글(7)
2011.07.14   c에서 일반적인 코드 접두사
2011.07.14   c언어에서 일어날 수 있는 문제들
2007.11.30   문자열의 입출력
2007.11.30   가변인수에 대하여 간단 정리
2007.11.30   비트 연산자의 연산


c에서 일반적인 코드 접두사
a    배열 
arr  배열
b    bool형 변수
c    character형 변수 
d    double형 변수
f     float형 변수
fd   파일 기술자
fp   파일 포인터형 변수 
h    핸들
i    int형 변수
n    int형 변수
p    포인터형 변수
pfn  함수에 대한 포인터
r    참조형 변수
s    String형 변수
str  CString형 변수
u    부호 없는 정수(unsigned int) 형 변수
w    word형 변수 unsigned int형 
 
신고

'승진이 공부중' 카테고리의 다른 글

CDC ?  (0) 2011.10.13
c에서 일반적인 코드 접두사  (0) 2011.07.14
c언어에서 일어날 수 있는 문제들  (0) 2011.07.14
Tag : c


c언어에서 일어날 수 있는 문제들
1. 0으로 나누는 경우에 문제 발생

2. 널 포인터를 이용할 수도 있어 문제 발생

3. 동적으로 할당한 메모리를 해제한  뒤에도 그 곳에 다시 접근할 수 있다

4. 문자열 끝에 널 문자를 넣지 않으면 문자열로 취급하지 않는다.

5. 배열의 범위를 넘어서 배열 요소를 지정하면 문제가 발생

6. 자료형이 다른 변수끼리 연산이 이루어진다.

7. 자료형이 다른 포인터로 메모리에 접근할 수 있어 엉뚱한 결과를 낳는다.

8. 종료 조건이 명확하지 않은 재귀 함수를 체크하지 않는다.

9. 주소와 주소의 연산을 체크하지 않는다.

10. 포인터 변수를 초기화하지 않고 쓸 수 있어 문제가 발생한다.  
신고

'승진이 공부중' 카테고리의 다른 글

CDC ?  (0) 2011.10.13
c에서 일반적인 코드 접두사  (0) 2011.07.14
c언어에서 일어날 수 있는 문제들  (0) 2011.07.14
Tag : c


문자열의 입출력

 fgets()를 이용한 문자열 입력 후 메모리 할당된 것을 보면

void main()

{

        char    *name;

 

        name = (char *)malloc(sizeof(char) * 10);

        fgets(name, 10, stdin);

 

        for(;*name;name++)

              printf("%c %d\n", *name, *name);

} 

사용자 삽입 이미지

이렇게 출력 결과를 보면 개행 문자가 삽입되는 것을 볼 수 있다.

fgets를 이용하면 마지막에 항상 개행 문자가 삽입되므로 이것을 제거하는 것이 좋다.

*(name + strlen(name) -1)) = '\0';

*(name + strlen(name) -1)) = 0;

*(name + strlen(name) -1)) = NULL;

name[ strlen(name) -1 ] = '\0';

이렇게 위 방법중 어떤 것을 쓰던지 해서 널을 넣어주어서 문자열이 끝나게 해준다.

문자열을 받아들일 때에는 scanf나 gets보다는 fgets()를 사용하고 fgets를 사용할 때에는 가장 마지막 문자인 '\n'(개행문자)의 처리를 잊지 말자.

gets()의 문제점은 오버플로어를 고려하지 않는다.

배열이 10개로 잡혀있는데 gets에서 12개의 문자를 입력해도 gets는 에러를 내지 않으므로 다른 곳에서 에러가 나거나 큰 문제를 일으킬 수 있다.

scanf는 숫자의 입력에만 주로 쓰고 fgets는 문자열 입력을 받을 때에 쓰도록 하자.

신고
Tag : c, 문자열입출력


가변인수에 대하여 간단 정리

#include <stdio.h>

#include <stdarg.h>

void main(){

        int    add(int, ...);

        int    sum;


        sum = add(2, 284, 945);

        printf("%d\n", sum);


        sum = add(5, 456, 74, 24, 826, 34);

        printf("%d\n", sum);

}


int    add(int count, ...)                  /*여기서count는몇개를출력할지알기위해서쓰지만포인터를쓰면포인터안에값이있으면출력하면되므로훨씬쉬워진다.*/

{

        va_list list;                //va_list 형의list 변수를선언해준다. 여기의매크로에서listchar *형으로캐스트된다.

        int    sum = 0;

        int    i;

       

        va_start(list, count);        //#define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )

                                      //#ifdef  __cplusplus

                                      //#define _ADDRESSOF(v)  ( &reinterpret_cast<const char &>(v) )

                                      //#else

                                      //#define _ADDRESSOF(v)  ( &(v) )

                                      //#endif

                                      //#define _INTSIZEOF(n)  ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

              //list의주소를갖고와서va_list로형변환을한후에그싸이즈만큼포인터를뒤로이동한다.

        for(i = 0;i < count;i++)

              sum += va_arg(list, int);  //#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

//포인터를뒤로이동한후의위치에list를이동시키고.. 다시 원 위치로가서그값을가져온다.                                                             

        va_end(list);                  //#define _crt_va_end(ap)      ( ap = (va_list)0 )

        return sum;

}

//코딩해서 넣은 글이라서 배치가 안좋네.. 프로그램이나 노트패드+같은 곳에 붙여 넣어서 볼 것

신고
Tag : c, 가변인수


비트 연산자의 연산

                         4 Byte

 0000 0000 0000 0000 0000 0000 0000 0000       [0]  

 1111 1111 1111 1111 1111 1111 1111 1111       [~0]:-1(0xFFFFFFFF)

 

 0000 0000 0000 0000 0000 0000 0000 0001       [1]  

 1111 1111 1111 1111 1111 1111 1111 1110       [~1]:-2(0xFFFFFFFE)

 

            int a = 10, b = 20

 00000000 00000000 00000000 00001010       [a:10]  

 00000000 00000000 00000000 00010100       [b:20]  

 00000000 00000000 00000000 00011110       [F:30]           <F = a ^ b

 00000000 00000000 00000000 00001010       [F^b:10]  

 00000000 00000000 00000000 00010100       [F^a:20]  

 

int a = 10, b = 20;

printf((“a = %d\n”,a);

printf((“b = %d\n”,b);

a^=b;

b^=a;

puts(“==============”);

printf(“a = %d \n”, a);

printf(“b = %d \n”, b);

 

<<  ^연산자를 이용한 데이터 교환  >>

                          int n = 4;

 0000 0000 0000 0000 0000 0000 0000 0100                      [n>>0:4]

 0000 0000 0000 0000 0000 0000 0000 0010                      [n>>1:2]

 0000 0000 0000 0000 0000 0000 0000 0001                      [n>>2:1]

 0000 0000 0000 0000 0000 0000 0000 0000                      [n>>3:0]

 0000 0000 0000 0000 0000 0000 0000 0000                      [n>>4:0]

>>연산자는 부호비트로 채운다. 부호비트가 0이므로 0으로 채운다.

 

                          int n = -4;

1111 1111 1111 1111 1111 1111 1111 1100  [n>>0:-4]

1111 1111 1111 1111 1111 1111 1111 1110  [n>>1:-2]

1111 1111 1111 1111 1111 1111 1111 1111  [n>>2:-1]

1111 1111 1111 1111 1111 1111 1111 1111  [n>>3:-1]

1111 1111 1111 1111 1111 1111 1111 1111  [n>>4:-1]

부호비트가 1이므로 1로 채운다.

 

short n = 0x4241;              //short2바이트 데이터형

printf(%x\n,(unsigned char) n );    //char1바이트 데이터형(형변환시 뒤에 1바이트만 저장된다.)

printf(%x\n,(unsigned short) n >>8 & 0xFF);

 

 

typedef unsigned char BYTE;

typedef unsigned short WORD;

typedef unsigned long DWORD;

#define MAKEWORD(x,y) ((BYTE)x|(WORD)y<<8)

#define MAKEDWORD(x,y) ((WORD)x|(DWORD)y<<16)

 

main

{

int n = 0;

n = MAKEDWORD(MAKEWORD)(0x41,0x42),MAKEWORD(0x43,0x44));

printf(%x\n, n);

}

 

44434241

신고
Tag : c, 비트연산자


BLOG main image
항상 0에서 시작한다는 자세를 갖고 앞으로 나에게 가장 유리한 것이 무엇인지를 찾아라.
 Notice
 Category
분류 전체보기 (228)
승진이 이야기 (29)
승진이 공부중 (16)
승진이 자료실 (1)
승진이와 Android (1)
승진이와 Java (49)
승진이와 DB (10)
승진이와 영어 (3)
승진이와 책 (8)
승진이와 C (6)
승진이와 Web (15)
승진이와 정보 (68)
승진이와 XML (3)
승진이와 Q&A (2)
승진이의 Logs (0)
승진이와 사진 (1)
승진이와 Android (0)
승진이와 자동차 (4)
승진이와 이클립스 RCP (6)
승진이와 프로젝트들 (0)
승진이와 JavaScript (2)
승진이와 쉘프로그래밍 (0)
Flex (0)
 TAGS
자격증 디렉토리 변경 쉘스크립트 넷빈즈 오라클 리눅스 팁 pk fk 조회 리눅스 특수 문자 펀드 쓰레드 IzPack LPIC 디렉토리명 c Android C언어 검색 객체 참조 문자열 검색 얼린 문 열기 에러 문자열 SDK Setup.exe 신협중앙회 java.lang.NoClassDefFoundError java install.xml 수식 엑셀 스윙 자바 뒤로가기 버튼 surge informix 새창으로 열기 크로스 브라우저 FTP업로드 Preference
 Calendar
«   2017/07   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
 Recent Entries
ORA-32039: 순환 WITH 절에는 열 별칭 목록..
rexpert 오라클 접속 설정 방법
간단한 코드 테이블 설계
String padding 자바스크립트
jquery selector 셀렉터 표현식으로 찾기
이광영 부장판사 솜방망이 처벌 관련 링크들
sql 디벨로퍼 각주 제거 생성 단축키
jquery 이용하여 프린트 1
테이블 자동 줄바꿈 처리 방법
문자 찍는 함수 CHR() 함수와 ASCII()함수
 Recent Comments
5년이란 시간동안 my..
은성훈 - 2014
한국새끼들이 이래서..
qweqwe - 2014
mysql도 rollup기능..
ㄴㄴㄴ - 2014
감사합니다
고마워요 - 2012
헐.. 정말인가요? 사..
BreathAir - 2011
저는 이제서야 관련..
originkim - 2011
아주 막장 그자체라..
기술자 - 2010
request의 parameter..
님 짱!! - 2010
제가 목격한 건데요...
^^ - 2010
네 도대체 왜 그렇게..
BreathAir - 2010
 Recent Trackbacks
スタッドレスタイヤ..
スタッドレスタイヤ..
野球ス ミズノ
野球ス ミズノ
ve may bay
ve may bay
visit this web page..
visit this web page..
timeshare vacation..
timeshare vacation..
joogle.in
joogle.in
arassegaf.com
arassegaf.com
new Software techno..
new Software techno..
www.douloschurch.com
www.douloschurch.com
fix DBF file
fix DBF file
 Archive
2013/12
2013/11
2013/04
2013/03
2012/09
 Link Site
내 마음속 폭풍은 아직 아..
괴짜 프로그래머의 일상사~..
Joel on Software
Android 개발자 커뮤니티 ,..
developer.com
Jace\'s Blog
오라클 10g Documentation
Programing Note (승만이)
실용주의를 꿈꾸며(이클립..
http://pragmatic.kr
자바 누리 기술 문서 / 매..
Reflect
Java API 6.0 한글번역
eclipse resources 문서 링..
자바 관련 소스 많은 곳
미디어 파일 (무제한 웹하드)
http://younghoe.info/
Open Knowledge Share Drea..
키스포토 (사진강좌와 사진..
외국 드라마 TV show 자막..
무료 ebooks
지금샵
 Visitor Statistics
Total : 226,349
Today : 25
Yesterday : 41
rss
 

티스토리 툴바