이전 리눅스 파일 시스템에서 File의 최대 크기는 2147483647byte 즉 2GB(1.99)였다.

이는 2^31 -1의 값이다. 즉

int32형에서 표현 가능한 최대 양수이다.


OS상에서 File의 주소, Offset 관련 Data가 int32형으로 표현 되어 있었기에 제한이 있었던 것 같다.


마찬가지로 fopen, fwrite등의 함수로 2GB넘는 파일에 접근이 불가능 하다. 내부적응로 int32가 박혀 있을 것 같다.

그래서 라이브러리에서는 2GB 이상의 파일을 다룰 수 있도록 fopen64, fwrite64등의 함수를 제공 하고 있다.


그렇다면 기존의 파일은 어떻게 하나? 일일히 바꾸기 힘들기에 다음 옵션을 사용 할 수 있다.

컴파일 옵션에 -D_FILE_OFFSET_BITS=64 을 입력 하면 file 관련 함수, 변수들이 자동으로 32->64 bit용으로 변경이 

된다고 한다.


** 16.02.07 추가

fseek 함수와 ftell 함수는 위의 컴파일 옵션으로 해결이 안된다.

이 함수들은 자체적으로 fseeko 와 ftello 함수로 변경 해주어야 한다.

Posted by Yann'
,

a = '가';

if( a & 0x80 ) //128 = 1000 0000

printf("한글");

else

printf("영어");


출력 : 한글

Posted by Yann'
,

str1 속에서 str2가 시작되는 인덱스 검색


#include <stdio.h>

#include <string.h>

int main (void){

char str1[] = "Hello World!";

char str2[] = "H";

printf("%d\n", strstr(str1, str2) - str1);

}



VB로 치자면 InStr함수


- 대소문자 구별 안하는 기능 추가 

- 임의의 위치부터 검색할 수 있는 기능 추가


Posted by Yann'
,

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


char* rtrim(char *str)

{

char * result;

int len = strlen(str);

int i = len;

int end=0;

result = (char *)calloc(len,sizeof(char));

strcpy(result, str);


while(i>0)

{

if( result[--i] == ' ' || result[i] == '\n' || result[i] == '\t' ) continue;

end = ++i;

break;

}

result[end] = '\0';

return result;

}


int main (void){

char temp[] = "test    \n    test2    \t \n";

char* result;

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

result = rtrim(temp);

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

return 0;

}

Posted by Yann'
,

strtok(str, tok); // 문자열 str을 tok으로 자르는 함수다.

처음 호출시 

strtok(str, tok);

를 호출 하고 이후에는

strtok(NULL, tok); 

를 남은 세그먼트 수만큼 호출하여 나머지 세그먼트를 분리한다.

더이상 반환할 문자열이 없으면

NULL을 반환


ex)-------------------

#include<string.h>

#include<stdio.h>

int main()

{

    char input[16] = "abc,d,e, fg";

    char *p;

    p = strtok(input, ",");


while(p){

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

p = strtok(NULL, ",");

}

    return 0;

}

Posted by Yann'
,

int arr[10];

printf("%d\n", sizeof(arr)/sizeof(int)); // 10 출력


2.

int arr[10][20];

printf("%d\n", (sizeof(arr)/sizeof(int)) / (sizeof(arr[0])/sizeof(int))); // 20 출력


Posted by Yann'
,

#include <ctype.h>
#include <stdio.h>
#include <conio.h>

int main(void) {
  char st[40]="hello world";
  int i;
  for (i = 0; st[i]; i++)
  st[itoupper(st[i]);
  printf("The uppercase of String= %s\n", st);
  getch();
  return 0;
}

Posted by Yann'
,