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])

この値を 2 番目の引数として 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

ここではグローバル変数の概念を使用しています。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ています。この答えはそれに従っています。配列を初期化する場合は、他の答えで十分です。それ以外の場合は、代入への初期化を間違えた場合はもう1つ変更してください。

あなたのメインにコメントしてください。つまり、

ini(buf);// buf を割り当てる

それがあなたがやりたいことなら、私の答えはそれによるものです:)

于 2013-07-17T13:44:33.357 に答える
0

したがって、すべての値を 0 に初期化したい場合は、直接初期化できます。

char buf[2000] = {0};

init 関数で直接行うことはできません。ただし、関数の ini を次のように変更すると、

#include <string.h>

void ini(char *a, size_t size){
  memset(a, 0, size);
}
于 2013-07-17T13:10:04.590 に答える