2013-07-17 2 views
1

저는 C의 초보자이고 제대로 할 지 확신하지 못합니다.알 수없는 길이의 배열을 초기화하는 방법은 무엇입니까?

char new_str[2000]; 
void ini(char a[]){ 
    for (int i=0;i<2000;i++) { 
     a[i] = new_str[i]; 
    } 
} 

int main(void) 
{ 
    char buf[2000]; 
    ini(buf);//initialize buf 
} 

나는이 경우 올바른 해요, 난이 buf[1000] 또는 다른 번호로 buf[2000]은 무엇 변경하면? 미리 감사드립니다.

+0

당신은 0 또는 new_str 안의 값으로 버프를 초기화하고 싶습니까? – Alexis

+0

왜이 질문은 많은 downvotes을 받고 있습니까? ... – Maroun

+0

@Alexis 내가하려는 것은 buff 0의 값을 초기화하는 것입니다. – OKC

답변

1

에 일 ini 함수를 변경하는 경우, 당신은 (ini를 두 번째 인수로이 값을 전달

sizeof(buf)/sizeof(buf[0])

사용할 수 있습니다) 기능.

그래서 코드는 다음과 같아야합니다

void ini(char a[], size_t size) 
{ 
    for (int i=0; i<size; i++) 
    { 
     a[i] = 0; 
    } 
} 

int main(void) 
{ 
    char buf[2000]; 
    ini(buf, (sizeof(buf)/sizeof(buf[0])));  //initialize buf 
} 

이 코드는 상관없이 배열 크기의 0으로 배열을 초기화합니다.

+1

'sizeof (buf)/sizeof (buf [0])'이 더 좋습니다 (배열 유형을 변경하는 것이 더 쉽습니다). – nouney

+0

@nouney하지만 이런 식으로 초기화하는 것은 분명히 OP의 의도는 아닙니다 :) – 0decimal0

+0

@PHIfounder Nithin의 답변에 대한 정밀도입니다. – nouney

0

그래서 0으로 모든 값을 초기화하기 원하는 경우 직접 초기화 할 수 있습니다 :

char buf[2000] = {0}; 

당신이 당신의 init 함수에서 직접 할 수는 없습니다. 당신이 문자 배열의 크기를 찾으려면

#include <string.h> 

void ini(char *a, size_t size){ 
    memset(a, 0, size); 
} 
+0

응답 해 주셔서 감사합니다. :) "ini"기능에서이 작업을 수행 할 수 있습니까? – OKC

+0

처음에 buf []를 선언 할 때 main()에서 수행 –

+1

이것은 OP가 묻는 것이 아니며 전역 변수는 자동으로 0으로 초기화되고 ini 함수를 통해 초기화하려고합니다. – 0decimal0

0

여기서 전역 변수 개념을 사용하고 있습니다. 그것들은 0으로 초기화되기 때문에 이것을 이렇게 사용할 수 있습니다.

for (int i = 0 ; i < 1000; i++) {// change i<2000 to i<1000 otherwise you may get a segmentation fault error 
     a[i] = new_str[i]; 
    } 

그리고 네, 함수에 전달 된 배열을 처리하는 동안의를 통과해야 :

당신은 다음과 같은 몇 가지 변경을해야 당신이 buf[2000]buf[1000]로 변경하는 경우를 제외하고이 경우 올바른 다른 답변에 설명 된대로 크기입니다. :)

NOTE--당신은 ini 기능 배열을 초기화하지 않습니다, 당신은 실제로 배열 buf,이 값을 할당하는 대답은 그에 따른 것입니다. 배열을 초기화하려면 다른 답변도 충분히 일치해야합니다. 그렇지 않으면 할당 초기화로 착각 한 경우 하나 더 변경하십시오. 주 예에서

코멘트,

INI (BUF), 즉 당신이 무엇을 원하는 경우 //이

buf를 내 대답이 그에 따라되는 지정 :

+1

Downvoters가 설명하고 제안하는 것에주의하십시오.) .... 너 유령이야? downvoter ... 설명해주세요 :) ....... 안녕하세요 .... 거기에 있습니까? – 0decimal0

관련 문제