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

4

3 回答 3

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,与数组大小无关。

于 2013-07-17T13:38:15.213 回答
0

So if you want to init all the value to 0 you can directly initialize it:

char buf[2000] = {0};

you can't do it directly in your init function. But if you change your function ini to

#include <string.h>

void ini(char *a, size_t size){
  memset(a, 0, size);
}
于 2013-07-17T13:10:04.590 回答
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

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

于 2013-07-17T13:44:33.357 回答