我是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 :(得分: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
根据我的回答,如果那是你想做的事情:)