2016-03-27 18 views
1

配列をコピーして、その新しいコピーされた配列へのポインタを返すコードを書いた。ポインタを使ってある配列から別の配列にコピーする

#include <assert.h> 
#include <stdint.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

//// Returns a pointer to a freshly allocated array that contains the 
// same values as the original array, or a null pointer if the 
// allocation fails. The caller is responsible for freeing the array 
// later. 

uint8_t* copy(const uint8_t array[], 
      unsigned int cols, 
      unsigned int rows) 
{ 
    uint8_t* dest = malloc(rows*cols*sizeof(uint8_t)); 
    int i; 
    for (i=0; i<rows*cols;i++) 
    {memcpy(&dest[i], &array[i], sizeof(array[0]));} 

    if (dest!=NULL) 
    {return *dest;} 
    else 
    {return NULL;} 
} 

// Print destination array 
int main(){ 
int i=0; 
const uint8_t cols=3; 
const uint8_t rows=2; 
const uint8_t dest[rows*cols]; 
const uint8_t array[rows*cols]; 

array[rows*cols]={1,2,3,4,5,6}; 

dest=copy(array, cols,rows); 

for (i=0; i<rows;i++) 
     {printf("%d ,",dest[i]);} 

return 0; 
} 

しかし、私はこれらを取得していますが、私はそれらを正しくやっている願っていますので、ポインタを使用する

Testing_code.c: In function 'copy': 
Testing_code.c:22:6: warning: return makes pointer from integer without a cast [enabled by default] 
    {return *dest;} 
    ^
Testing_code.c: In function 'main': 
Testing_code.c:35:18: error: expected expression before '{' token 
array[rows*cols]={1,2,3,4,5,6}; 
       ^
Testing_code.c:37:1: warning: assignment of read-only location 'dest' [enabled by default] 
dest=copy(array, cols,rows); 
^ 
Testing_code.c:37:5: error: incompatible types when assigning to type 'const uint8_t[(sizetype)((int)rows * (int)cols)]' from type 'uint8_t *' 
dest=copy(array, cols,rows); 
    ^

イム新しいエラーをコンパイルします。私は、dest配列に麻のメモリを割り当てようとしましたが、arrayの値をdestにコピーしてからdestへのポインタを返します。

答えて

1

むしろdestを返すようにする* dest

関連する問題