2013-07-17 7 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[2000] к buf[1000] или другому номеру? Спасибо заранее.

+0

Вы хотите начать свой бафф с того, что 0 или значение внутри new_str? – Alexis

+0

Почему этот вопрос получает так много downvotes? ... – Maroun

+0

@Alexis То, что я пытаюсь сделать, это инициализировать значение в buff, чтобы быть всем 0. – OKC

ответ

1

, если вы хотите, чтобы найти размер массива символов, вы можете использовать

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

Передайте это значение в качестве второго аргумента к INI ().

Поэтому код должен быть:

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 Это просто точность ответа Нитина :) – nouney

0

Так что, если вы хотите, чтобы инициализировать все значения 0 можно непосредственно инициализировать его:

char buf[2000] = {0}; 

вы не можете сделать это непосредственно в функции инициализации. Но если вы измените функцию ини на

#include <string.h> 

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

Спасибо за ответ. :) Могу ли я сделать это в функции «ini»? – OKC

+0

сделать это в main(), когда вы впервые объявляете buf [] –

+1

Это не то, о чем спрашивал OP. Глобальная переменная автоматически инициализируется до 0 и через функцию, которую он хочет инициализировать. – 0decimal0

0

Здесь вы используете концепцию глобальных переменных. Они инициализируются до 0, поэтому вы можете использовать его так.

Вы правильно в этом случае, за исключением, если вы измените buf[2000] на buf[1000] то вам придется внести некоторые изменения, как это:

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]; 
    } 

И да, в то время как дело с передачей массивов в функции, вы должны пройти ИТС размер, как описано в других ответах. :)

NOTE--Вы не инициализирует массив с помощью функции ini, Вы фактически присваивая значения массива buf, и это ответ в соответствии с этим. Если вы хотите инициализировать массив, то другие ответы соответствуют достаточно хорошо, иначе сделайте еще одно изменение, если вы ошибаетесь при инициализации для назначения.

Комментарий в главном, т.е.,

ини (BUF); // присваиваем ЬиЕ

Мой ответ в соответствии с этим, если это то, что вы хотите сделать :)

+1

Downvoters, пожалуйста, позаботьтесь, чтобы объяснить и предложить:) .... ты призрачный мистер. downvoter ... пожалуйста, объясните:) ....... привет ... вы там? – 0decimal0

Смежные вопросы