2013-11-23 2 views
0

배열의 크기 (채워진 크기)를 확인하고 싶습니다.C 배열 길이 (채워짐)

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

int main() 
{ 
    char name[10]; 
    puts("Write your name"); 
    scanf("%2s", name); //test 

    size_t n = sizeof name/sizeof *name; 
    printf("size: %d",n); //result 10 

} 

나는 (시험) 결과 (4)를 얻을

+0

이름이 test => scanf ("% 2s", name)이기 때문에; // "test"를 입력하십시오 – user1012535

+0

OP에 downvoting.according하기 전에 OP의 명성 포인트를 확인하는 것이 좋을 것 같아요. 그는 대답이없고 자신의 검색에서 잘못된 키워드로 조사하려고했습니다. – rjv

답변

2

string.h의 strlen 함수가 작업을 수행해야합니다.

6

배열의 크기는 변경되지 않습니다 싶습니다. 항상 배열에 할당 된 바이트 수가 표시됩니다. 필요한 것은 문자열의 길이이고 함수 strlen을 사용하여 문자열을 얻을 수 있습니다.

+0

더 정확하게, for 이와 같이 정적으로 선언 된 크기의 배열은 배열의 요소 수를 반환합니다. (이것은'char' 타입의 배열에 대한 바이트 수와 동일하지만 연산자가 무엇을하는지 분명히 알 수 있습니다.) –

+0

it 배열에 대해서는 참이 아닙니다. –

0

몇 가지 기본 사항 : 영업 이익

: 왜 scanf와의 % 2 초 형식 지정자를 넣어 않았다?

------> 문자열의 처음 두 문자 만 출력 할 수 있습니다. 간단한 scanf % s을 사용하십시오.

이제 답변 : 문자열과 문자 배열

충전물 : 상기 메모리 어레이 내의

(a continguous 메모리 블록)이

 --------------------------------------------------------- 
     | 't' | 'e' | 's' | 't' | '\0' | Rest all are also '\0' |     
     --------------------------------------------------------- 
     0  1  2  4  5  6  7  8  9  

그리고는 sizeof (배열) 같다 char가 size = 1이기 때문에 여기에 배열의 크기 즉 10을줍니다.

sizeof (char * array)는 배열의 첫 번째 요소 크기 즉 char (size = 1)을 제공합니다.

그래서 결과는 10입니다. 요소의 크기로 배열 크기를 나눠서 전체 블록의 크기를 알 수 있습니다. 배열의 첫 번째 널 문자에 대한

검색 :

가득 배열의 크기를 얻으려면.

int i=0; 

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

     { if(name[i]==NULL) break; } 

    printf("Size is %d\n",i); 

또는 해당 작업을 수행하는 string.h 라이브러리에 포함 된 strlen 함수를 사용하십시오.

#include <string.h> {......... printf("Size is %d\n",strlen(name));......}