6

(temp)別の配列から配列をコピーしようとしていますa。しかし、私はそれが起こっていません。

Fig-1

int main()
{
    typedef int arr_1[3];
    arr_1 arr[4];
    arr_1 *temp;
    arr_1 a[3] = {1, 2, 3};
    memset(&temp, 0, sizeof(temp));
    memcpy(temp, a, sizeof(temp));
}

しかし、以下のような簡単なプログラムで試したところ、

Fig-2

 main()
    {
    int abc[3], def[3];
    def[3] = {1, 2, 3};
    memcpy(abc, def, sizeof(abc));
    }

この上記のコード(fig-2)は、私にとっては本当にうまくいきました。しかしfig-1、私のために働いていません。どちらもほぼ同じです。しかし、なぜ機能しないのfig-1ですか??

4

5 に答える 5

9

は配列ではないためtemp、ポインターであるため、配列とsizeof(temp)はまったく関係がありません。

memcpyを使用するように変更したいsizeof(a)。またtemp、コピーする前に適切な値を指定する必要があります。そうしないと、プログラムの動作が未定義になります。

于 2013-03-28T15:05:34.727 に答える
5

たとえば、メモリtempを割り当てる必要があります。malloc()今のところ、それは単なる初期化されていないポインターです。

于 2013-03-28T15:08:04.040 に答える
3

私は知っています、私は遅れています。しかし、以前の回答を読んだとき、「これらすべての変数は必要ありません」と思いました

あなたの簡単なサンプルで:

int abc[3], def[3]; //abs is destination and def is source
def[3] = {1, 2, 3};
memcpy(abc, def, 3*sizeof(int)); //you can do sizeof(int) as you have here an array of int.

ただし、変数「const int array_size = 3」または「#define ARRAY_SIZE 3」を使用して配列サイズを定義することをお勧めします。次に、「3」を「ARRAY_SIZE」に置き換えるだけで、同じ仕事をしてサイズの間違いを避けることができます。

あなたの本当の問題であなたができること:

#define ARRAY_SIZE 3

typedef int arr_1[ARRAY_SIZE];
arr_1 arr[ARRAY_SIZE+1];//it is useless here
arr_1 *temp = (arr_1 *) malloc(sizeof(arr_1)); //it is your destination, but you have a pointer of array
arr_1 a[ARRAY_SIZE] = {1, 2, 3};//it is your source

//by doing sizeof((*temp)[0])
//you do not care about the type of you array pointer
//you are sure to take the good size --> it fills your array with 0
memset((*temp), 0, (ARRAY_SIZE+1)*sizeof((*temp)[0])); 

//same logic
//but you destination is (*temp) because you have a pointer of array
//it means that your array arr and a have the same type
memcpy((*temp), a, ARRAY_SIZE * sizeof(a[0]));  

//by the way, the las cell of arr is still 0
//and a pointer is close to an array. If you do "tmp = a;" it works.
//but it is not a copy, you just give the a's reference to tmp
于 2018-08-02T15:12:41.710 に答える
2

以前の回答の要約として:

tmpsize = でメモリを割り当てる必要がありますsizeof(a)。そしてmemcpyサイズ=で sizeof(a)

arr_1 a[3] = {1, 2, 3};
arr_1 *temp = malloc(sizeof(a));
memcpy(temp, a, sizeof(a));

tempプログラムで役に立たなくなったら解放することを忘れないでくださいfree(temp);

于 2013-03-28T15:31:37.427 に答える