설명

숫자 문자열을 long형 숫자로 변환합니다. atoi()나 atol()과는 달리 (1) 변환하려는 진수를 선택할 수 있으며, (2) 숫자 문자가 아닌 문자를 만나면 그 포인터 위치를 구해 줍니다.

예로, "2007forum.falinux.com" 을 호출하게 되면,

   char   *str;
   char   *ptr;
   long    value;

   str   = "2007forum.falinux.com";
   value = strtol( str, &ptr, 10);
  • value에는 2007이 들어 가고
  • ptr에는 숫자로 변화하지 못하는 문자열의 시작 위치를 구해 줍니다.
    만약 NULL을 넘겨주면 시작 위치를 구하지 않습니다.

헤더 stdlib.h
형태 long strtol(const char *restrict str, char **endptr, int base);
인수
char *str 정수로 변환할 문자열
char **endptr 숫자로 변경하지 못하는 문자열의 시작 위치
int base 문자열이 가지고 있는 숫자의 진수 (2~32)
반환
long 10진 long형 정수 값

예제

#include <stdio.h>
#include <stdlib.h>

int main( void)
{
   char   *str;
   char   *ptr;
   long    value;

   str   = "2007forum.falinux.com";
   value = strtol( str, &ptr, 10);          // 10진수로 변환
   printf( "%s strtol =%ld    str=%s\n", str, value, ptr);

   value = strtol( str, &ptr, 8);           // 8진수로 변환
   printf( "%s strtol =%ld    str=%s\n", str, value, ptr);

   value = strtol( str, &ptr, 16);          // 16진수로 변환
                                            // 2007f까지 숫자로 변환이 됩니다.
   printf( "%s strtol =%ld    str=%s\n", str, value, ptr);

   return 0;
}
]$ ./a.out
2007forum.falinux.com strtol =2007    str=forum.falinux.com
2007forum.falinux.com strtol =1031    str=forum.falinux.com
2007forum.falinux.com strtol =131199    str=orum.falinux.com

 

출 처 : http://forum.falinux.com/zbxe/index.php?document_srl=408138&mid=C_LIB

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

strtol() 정수 문자열을 진수 선택하여 정수로 변환  (0) 2014.03.17
sscanf  (0) 2014.02.10
strerror() 함수  (0) 2013.12.04
c99 표준 tagged structure initialization  (0) 2011.06.16
win32 DLL에서 CString 사용하기!  (0) 2009.05.11

댓글을 달아 주세요

sscanf

Posted by 춘자 Programming/C : 2014.02.10 23:37

특정 문자열에서 원하는 값을 원하는 data type으로 뽑아낼 수 있는

좋은 함수로 보인다.

참고 : http://itguru.tistory.com/67

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

strtol() 정수 문자열을 진수 선택하여 정수로 변환  (0) 2014.03.17
sscanf  (0) 2014.02.10
strerror() 함수  (0) 2013.12.04
c99 표준 tagged structure initialization  (0) 2011.06.16
win32 DLL에서 CString 사용하기!  (0) 2009.05.11

댓글을 달아 주세요

strerror() 함수

Posted by 춘자 Programming/C : 2013.12.04 22:12

/* 
존재하지 않는 파일 unexist.ent 를 열라고 해 오류가 발생한다.
 */


#include <stdio.h>
#include <string.h>
#include <errno.h>

int main ()
{
    FILE * pFile;
    pFile = fopen ("unexist.ent","r");
    if (pFile == NULL)
        printf ("Error opening file unexist.ent: %s\n",strerror(errno));
    return 0;
}


해당 에러가 발생한 원인에 대한 문자열을 출력해 준다.

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

strtol() 정수 문자열을 진수 선택하여 정수로 변환  (0) 2014.03.17
sscanf  (0) 2014.02.10
strerror() 함수  (0) 2013.12.04
c99 표준 tagged structure initialization  (0) 2011.06.16
win32 DLL에서 CString 사용하기!  (0) 2009.05.11

댓글을 달아 주세요

c99 표준 tagged structure initialization

Posted by 춘자 Programming/C : 2011.06.16 20:07

There is one more way by which we can initialize structures. These way utilizes the benefits of both the ways of structure initialization described here. That is we are able to initialize the elements of the structure using the set notation and also we need not remember the order of the elements of the structure.
Suppose consider the structure ‘student‘ we already used

struct student {

     int roll;

     int class;

     char name[50];

};

Now let’s declare a variable st3 and initialize using the third method

student st3={

           .name = "Mark", //Notice the equal to and the comma

           .class  = 10,

           .roll  = 1038

};

As you can see the way by which the variable st3 has been initialized. It has used the set notation and also see the order is not the same as in the case of the structure ‘student


The following program demonstrates this. Note the different ways by which the array of structures has been initialized

/*

*Different Ways of structure initialization

*/#include < stdio.h>

#include < string.h>

#define NAME_LEN 25

typedef unsigned short age_t;

typedef unsigned int roll_t;

typedef struct student{

    char name[NAME_LEN];

    roll_t rno;

    age_t age;

}student;

int main()

{

/* Method 3a: Just like the Method 2a, but here you do not

* need to know order of the elements in the declaration

*/

student st3={

.name = "Mark",//Notice the equal to and comma

.age  = 23,
.rno  = 1038
};

printf("%s %hi %u\n\n",st3.name,st3.age,st3.rno);

/*

* Method 3b: For Initializing an array of structures

*/

student st4[]={
{

.name = "Neil",

.age  = 23,

.rno  = 1039      },

{

.name = "Peter",

.age  = 23,

.rno  = 1040

}
};

printf("%s %hi %u\n%s %hi %u\n\n",st4[0].name,st4[0].age,

st4[0].rno, st4[1].name,st4[1].age,st4[1].rno);

/*

* Method 3c : Change the order of initialization of the

* elements of the array. Normally as seen in Method 2b,

* the 0th array element is initialized  then 1st, then

* 2nd and so on. So by using a variation  of Method 3b,

* we  can initialize the array elements in any order

*/

student st5[5]={

  [3]={

              .name = "Titus",

              .age  = 22,

              .rno  = 1041      },

[2]={

              .name = "Stephen",

              .age  = 23,

              .rno  = 1042

      }

      /*As you can see only 2nd and 3rd array elements has

       * been initialized and that too not in order. Such

       * an initialization is useful, if we wish to allocate

       * some fixed size array but only initialize some element

       */
};

printf("%s %hi %u\n%s %hi %u\n\n",st5[2].name,st5[2].age,

st5[2].rno, st5[3].name,st5[3].age,st5[3].rno);

}
The Methods 3a, 3b and 3c are the ways of structure initialization that I have seen in the kernel code. If you find any other way to do the structure initialization, kindly comment.

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

strtol() 정수 문자열을 진수 선택하여 정수로 변환  (0) 2014.03.17
sscanf  (0) 2014.02.10
strerror() 함수  (0) 2013.12.04
c99 표준 tagged structure initialization  (0) 2011.06.16
win32 DLL에서 CString 사용하기!  (0) 2009.05.11

댓글을 달아 주세요

win32 DLL에서 CString 사용하기!

Posted by 춘자 Programming/C : 2009.05.11 02:07
MFC 기반에서 CString 을 이용해서 코딩한 클래스가 있었다. 이 클래스를  win32 DLL로 만들기 위해서  옮겨와서 
컴파일 했더니  CString을 지원해 주지 않아 오류가 났다. 하지만 해결책은 존재했다. ^-^
아래와 같은 헤더파일 두개를 추가시켜주면 된다.

#include <string.h>
#include <atlstr.h>

추가!!!

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

strtol() 정수 문자열을 진수 선택하여 정수로 변환  (0) 2014.03.17
sscanf  (0) 2014.02.10
strerror() 함수  (0) 2013.12.04
c99 표준 tagged structure initialization  (0) 2011.06.16
win32 DLL에서 CString 사용하기!  (0) 2009.05.11

댓글을 달아 주세요

 «이전 1  다음»