삼항연산자 


(조건문)?(참):(거짓);


ex)


#include<stdio.h>

#include<string.h>


int main(int argc, char *argv[])

{

    int count =0;

    if(strcmp(argv[1],"1")==0)

        count =1;

    else

        count =0;


    (count==0)?printf("HI\n"):printf("count=1\n");

    return 0;

}



다만 평소처럼 쓰는 이항연산자와 삼항연산자의 성능차이는 미미하다고 함.

'Programming > C' 카테고리의 다른 글

열거형 enum  (0) 2012.07.09
sscanf , sprintf  (0) 2012.07.06
문자열 붙이기 Strcat()  (0) 2012.07.04
Strtok 문자열 자르기  (0) 2012.06.29
Extern 함수  (0) 2012.05.21

enum 열거형은 자주 사용되지는 않지만 알아두면 편리하다.


예를들어 알파벳을 이용할떄 


char buf[]="abcdef......z";

라고 선언을 하면 buf[0]=a~e까지는 쉽게알 수 있으나 q나 y같은건 몇번째 일까?

이럴때 


enum {a,b,c,d,e,f,.....,z}; 와 같이 사용하면,굳이 인덱스번호를 알지않아도, 바로 사용할수 있다.


ex)


int main(){


enum {a,b,c,d,e,f,....z};

char ch="a";


if(ch==a)  혹은 if(ch==0)이런식으로 사용해도 되는 것이다.


컴퓨터가 보기엔 별거 아니지만 소스코드를 짜는 사람입장으로서는 엄청나게 가독성이 상승하게 된다.


enum 사용 예제


#include <stdio.h>

enum week {sun, mon, tue, wed, thu, fri, sat};

int main(void)

{

    enum week day1;

    day1=fri;

    printf("day1 : %d\n", day1);

    printf("fri : %d\n", fri);

    day1=mon;

    printf("day1 : %d\n", day1);

    printf("mon : %d\n", mon);

    return 0;

}


'Programming > C' 카테고리의 다른 글

삼항연산자  (0) 2012.09.12
sscanf , sprintf  (0) 2012.07.06
문자열 붙이기 Strcat()  (0) 2012.07.04
Strtok 문자열 자르기  (0) 2012.06.29
Extern 함수  (0) 2012.05.21

sscanf와 sprintf는 입력혹은 출력 대상이 모니터가 아닌 메모리라는 것을 제외 하면 scanf와 print와 같은 기능을 한다.


#include<stdio.h>

int sprintf(char *restrict s,const char* restrict format,....);

함수 호출 성공시 저장된 문자열의 길이, 실패시 EOF반환.


#include<stdio.h>

int sscanf(char *s,const char* restrict format, ...);

함수 호출 성공시 읽어 들인 데이터의 갯수, 실패시 EOF 반환.


sscanf 예제)

#include<stdio.h>


int main()

{

        char buf[100];


        sscanf("HI~!Taesun1114's blog","%s",buf);


        printf("%s\n",buf);

        return 0;

}



sprintf 예제)
#include<stdio.h>

int main()
{
        char buf[100];

        sprintf(buf,"HI~!Taesun1114's blog");
        printf("%s\n",buf);
        return 0;
}



'Programming > C' 카테고리의 다른 글

삼항연산자  (0) 2012.09.12
열거형 enum  (0) 2012.07.09
문자열 붙이기 Strcat()  (0) 2012.07.04
Strtok 문자열 자르기  (0) 2012.06.29
Extern 함수  (0) 2012.05.21

프로그래밍을 하다가 보면 문자열을 붙이고자 할떄가 있다.

이때 사용하는 함수가 Strcat이다.


Strcat(result,buf);


=>buf에 있는 값을 result와 합쳐 result에 저장한다.


ex)

#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[]){

        int size;

        char buf[]="HI~";

        char buf1[]="taesun1114 blog's";


        printf("buf : %s\nbuf1 :%s\n",buf,buf1);

        strcat(buf,buf1);

        printf("%s\n",buf);


        return 0;

}

다만, 주의할 것이 있는데 합쳐진 buf의 size는 달라지지 않는다.


#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[]){

        int size;

        char buf[]="HI~";

        char buf1[]="taesun1114 blog's";


        printf("buf : %s\nbuf1 :%s\n",buf,buf1);

        printf("buf size : %d\n",sizeof(buf));

        strcat(buf,buf1);

        printf("%s\n",buf);

        printf("changed buf size:%d\n",sizeof(buf));


        return 0;

}




'Programming > C' 카테고리의 다른 글

열거형 enum  (0) 2012.07.09
sscanf , sprintf  (0) 2012.07.06
Strtok 문자열 자르기  (0) 2012.06.29
Extern 함수  (0) 2012.05.21
함수 포인터  (0) 2012.05.07

#include<string.h>


strtok(*string,"구분자");


strtok는 인자로 다음과 같이 어떤 '문자열' 과 '구분자' 를 받아서 그 구분자를 기준으로 토큰을 리턴하는 함수이다.


ex)

#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[])

{

        char *pointer=NULL;


        pointer = strtok(argv[1],"~");

        printf("%s\n",pointer);

        pointer = strtok(NULL,"/");

        printf("%s\n",pointer);


        return 0;

}





단, strtok함수를 쓸때는 주의할 점이 있는데, 처음에 strtok함수를 사용하고 나면, strtok함수가 구분자를 만나면 구분자를 NULL바꿔버리고 그 자리의 주소를 기억하고 있는다. 따라서 다음번에 다시 strtok를 사용할 떄는 argv[1]이 아니고, NULL을 해야 처음에 잘라낸 부분 뒤부터 구분자를  찾는 것이다. 그렇지 않을 경우에는 계속 처음부터 검색을 하게 됨.


#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[])

{

        char *pointer=NULL;


        pointer = strtok(argv[1],"~");

        printf("%s\n",pointer);

        printf("%s\n",argv[1]);

        pointer = strtok(NULL,"/");

        printf("%s\n",pointer);


        return 0;

}


strtok함수를 사용하고 난후에 다시 argv[1]을 출력하면 ~가 NULL로 바뀌어 hi까지만 출력이 된다.


'Programming > C' 카테고리의 다른 글

열거형 enum  (0) 2012.07.09
sscanf , sprintf  (0) 2012.07.06
문자열 붙이기 Strcat()  (0) 2012.07.04
Extern 함수  (0) 2012.05.21
함수 포인터  (0) 2012.05.07

Extern 함수는 변수 이름에 extern을 붙여주면 external linkage를 갖게 되어 다른 모듈에서 링크 할 수 있게 해준다.

 

ex)

main.c

 

#include<stdio.h>

 

extern int func_sum(int k);

 

int main(int argc,char *argv[]){

 

int i;

int k;

int sum=0;

 

if(argc<2){

fprintf(stderr,"Usage : Main 3\n");

exit(1);

}

 

k=atoi(argv[1]);

sum = func_sum(k);

 

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

 

return 0;

}

 

 

func_sum.c

 

#include<stdio.h>

 

int func_sum(int k){

int i;

int sum=0;

 

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

sum+=i;

 

return sum;

}

 

 

컴파일시에 링크를 걸어줘야 함.

 

<stdio.h 헤더파일>

'Programming > C' 카테고리의 다른 글

열거형 enum  (0) 2012.07.09
sscanf , sprintf  (0) 2012.07.06
문자열 붙이기 Strcat()  (0) 2012.07.04
Strtok 문자열 자르기  (0) 2012.06.29
함수 포인터  (0) 2012.05.07

함수 포인터란?

함수 포인터는 함수의 주소값을 저장하는 포인터이다.

함수의 시작주소값을 가지는 포인터로써, 가르키는 함수의 반환형과 매개변수의 타입이 맞아야만 주소를 저장할 수 있다.

 

int (*ptr)(int)라는 함수 포인터가 있다면,

 

int function(int tmp) 처럼 생긴 포인터를 가르킴. 즉,

 

 

같은 색상의 밑줄끼리는 같은 타입이어야 함수 포인터로 주소값을 저장할 수 있다.

 

함수포인터를 이용한 간단한 예제.

 

실행 화면.

 

 

또한 함수포인터는 typedef 로 미리 선언해 줄수가 있다.

 

#include<stdio.h>

 

typedef int(*ptr)(int)

 

int main()

{

ptr ptr;

 

이런 식으로 미리 선언이 가능하다. 실제로도 이렇게 많이 사용한다고 함.

 

'Programming > C' 카테고리의 다른 글

열거형 enum  (0) 2012.07.09
sscanf , sprintf  (0) 2012.07.06
문자열 붙이기 Strcat()  (0) 2012.07.04
Strtok 문자열 자르기  (0) 2012.06.29
Extern 함수  (0) 2012.05.21

+ Recent posts