如何初始化长度未知的数组?

时间:2013-07-17 13:02:27

标签: c arrays initialization

我是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]或其他号码该怎么办? 提前谢谢。

3 个答案:

答案 0 :(得分: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 :(得分:0)

因此,如果要将所有值初始化为0,可以直接初始化它:

char buf[2000] = {0};

你不能直接在你的init函数中做到这一点。但是如果你将你的函数改为

#include <string.h>

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

答案 2 :(得分: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];
   }

是的,在处理将数组传递给函数时,您必须按照其他答案中的描述传递其大小。:)

注意 - 您没有使用ini函数初始化数组,您实际上正在为数组buf分配值,而此答案是根据那。如果你想初始化数组,那么其他答案就足够了,否则如果你在初始化和分配方面的错误那么再做一次更改。

评论你的主要是,

  

ini(buf); //分配buf

根据我的回答,如果那是你想做的事情:)