컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post Java/자바] 복소수 사칙연산 클래스; 덧셈, 뺄셈, 곱셈, 나눗셈; Complex Nu...Excel/엑셀] 복소수 사칙연산; 덧셈, 뺄셈, 곱셈, 나눗셈; Calc Complex ...지메일(Gmail) 영문판, 한글판 스냅샷(캡처) 화면; Screen CaptureExcel/엑셀] 복소수 표현, 입력 함수, 사용 방법; Input Complex Numb...C언어] malloc 함수, strcpy 함수로, 문자열 복사, 저장, 출력 방법; Str...C언어] malloc() 함수로 메모리 할당 받기. 사용 방법Perl/펄] 변수명 그 자체를 출력, 변수 이름/달러 기호; Print Var Name,...Perl/펄] 복소수 사칙연산; 덧셈, 뺄셈, 곱셈, 나눗셈; Complex NumberPerl/펄] 배열 사이즈/크기 (요소 개수) 구하기, 달러+샤프 기호로; Array Si...Python/파이썬] 복소수 사칙연산; 덧셈, 뺄셈, 곱셈, 나눗셈; Complex Num...

C언어] 배열 크기, 길이, 사이즈 (요소 개수) 구하기; Get Array Size, Number of Elements

Friday, February 16, 2007

sizeof 연산자(operator)를 사용합니다. 함수는 아닙니다.

sizeof(array) 나누기 sizeof(array[0])

이렇게 하면, 배열 요소 개수(number of elements in an array)가 구해집니다.


sizeof(array) 로, 배열 전체의 바이트(Byte) 수를 구하고

sizeof(array[0]) 으로, 배열 첫번째 요소의 크기를 바이트 단위로 구합니다. 이것을 나누면, 배열의 요소 개수가 나옵니다. 다음 예제와 같습니다.


sizeof 연산자로 배열 사이즈 계산 예제


소스 파일명: example.cpp
#include <stdio.h>

int main(void) {

  int foo[] = { 519, 31, 7988, 165326, 10, -24642, 134 };


  // 배열의 바이트 수 (메모리 차지하는 용량) 출력
  printf("%d\n", sizeof(foo));
  // 출력 결과: 28
  // 4바이트인 int가, 7개 있어, 4 * 7 = 28 이기에


  // 배열 요소 개수 출력
  printf("%d\n", sizeof(foo) / sizeof(foo[0]));
  // 출력 결과: 7
  // 배열에 7개의 요소가 있으므로


  return 0;
}




▶▶ C언어] 포인터 배열 (문자열 배열) 요소 개수(크기/사이즈) 구하기; String Array Size

▶▶ C언어] 1차원 배열 선언, 배열 초기화 예제: One-Dimensional Array Initialize

▶▶ C언어] 문자열 길이 구하기 함수, 바이트 단위 글자 개수 얻기; String Size Byte

2 Comments:
At 7:29 AM, Blogger Chang-yong said...

잘 보았습니다.
배열 사이즈를 구할때 유용하겠네요.
그런데 위의 경우 값이 배열 선언시
사이즈 지정없이 자동적으로
저장될 요소만큼 선언되게 되있는 경우에서는
유용하지만.
이미 배열 사이즈는 100으로 지정되었고
들어간 값은 50개밖에 안되고
그 50개의 값을 원할때에는
얘기가 달라지네요.

현재 파일을 읽어와서
파일안에 있는 줄 만큼 다시
저장할려고 하는 함수를 만드는데
그 함수 안에 들어갈
for문 조건을 어떻게 해야할지 모르겠네요.

void updateStock(int snA[], int qA[]){
FILE *fp3;
int i;
fp3=fopen("stock.dat","w");
for(i=0;i<snA[i];i++){//문제의 조건
fprintf(fp3,"%.6d:%d\n",snA[i],qA[i]);
}
fclose(fp3);
}
계속 엉뚱한 값이 추가로 저장이 되네요.

 
At 10:47 AM, Blogger mwultong said...

int foo[] = { 519,... 이런 것도 실은 사이즈가 자동으로 지정되어 이미 고정된 배열입니다. 소스상에서 첨자가 생략되었을 뿐입니다.

C는 어셈블리 같은 저급언어이기 때문에, 실제 사용된 배열의 크기를 아는 방법은 없습니다. 그래서 "실제 배열의 끝"에, 끝임을 알리는 데이터를 넣어서 표시를 해두거나, 또는 "데이터 파일의 요소 개수"와 "배열의 요소 개수"를 미리 일치시켜 놓습니다.

stock.dat가 텍스트 파일일 경우에는 fgets() 함수로 파일을 읽으면 됩니다. 1행의 끝까지 읽습니다:
C언어 예제] 텍스트 파일 읽기; 도스창 화면에 파일 내용 출력; 도스 type 명령
그리고 1행의 내용을 각 요소로 분해하는 작업을 해주어야 하는데, 이건 상당히 까다롭습니다.

stock.dat가 이진파일(바이너리 파일)이라면, "데이터 저장 계획"에 의해 요소의 개수, 또는 요소들의 범위가 미리 확정되어 있을 테니, 대부분의 경우, 실제 요소 개수를 세어야 할 필요는 없을 것입니다.

말씀하신 작업은 간단한 함수 1개로 처리하기에는 너무 복잡한 듯합니다. 적어도 1페이지 정도의 소스가 필요할 것 같습니다.

작성하시려는 함수가 "파일 복사"와 어느 정도 비슷해 보입니다. 파일 복사 함수를 한번 참고해 보세요: C언어] 파일 복사 함수, 화일 카피 소스; File Copy Function Source Code

원론적인 말씀만 드려서 죄송합니다 -_-;

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top