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へのポインタを返します。