memcpy ist ein Puffer und ein array funktioniert nicht
Habe ich eine Anforderung, die in der ich übergeben zu müssen, ein leeres array als parameter an eine Funktion. Und in dieser Funktion aufgerufen, ich sollte memcpy einige Daten in den übergebenen array. Also ich habe geschrieben ein kleines Beispiel, ist die gleiche wie meine Anforderung. Unten ist seine code:
#include <stdio.h>
#include <stdlib.h>
void printArr(int *a)
{
int i;
int *b=(int*)malloc(sizeof(int)*10);
printf("\n\nEnter 10 lements:\n");
for(i=0;i<10;i++)
scanf("%d",&b[i]);
printf("\nContents of array b:\n");
for(i=0;i<10;i++)
printf("%d\t",b[i]);
printf("\n");
memcpy(a,b,10);
printf("\nContents of array a:\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
printf("\n");
}
int main()
{
int a[10];
printArr(a);
return 0;
}
In dem oben genannten Beispiel, ich sende ein array aus der main-Funktion, um die printArr Funktion. Jetzt in der aufgerufenen Funktion werden die Daten memcpy in das array. Wenn die array-Inhalte gedruckt werden, die ich einige junk-Werte. Auch die Zusammenstellung gibt eine Warnmeldung, wie unten dargestellt:
$ gcc -o arr array.c
array.c: In function ‘printArr’:
array.c:15:2: warning: incompatible implicit declaration of built-in function ‘memcpy’
Die Ausgabe des obigen Programms ist, wie unten gezeigt:
Enter 10 lements:
0 1 2 3 4 5 6 7 8 9
Contents of array b:
0 1 2 3 4 5 6 7 8 9
Contents of array a:
0 1 134479874 11136160 11136160 11132916 134514160 134513696 134514171 11132916
Kann mir bitte jemand sagen, was falsch ist in dem oben genannten Programm.
Hinweis: ich brauche zum kopieren von Daten aus dem Puffer auf den übergebenen array nur mit memcpy und nicht über eine for-Schleife aufgrund von performance-Gründen in meinem eigentlichen Programm.
Vielen Dank im Voraus.
InformationsquelleAutor Zax | 2013-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Dritte argument die Anzahl der bytes zu kopieren. Sie möchten
memcpy(a, b, 10 * sizeof *a)
.Auch, Ihnen fehlt ein
#include <string.h>
, das ist, warum Sie bekommen die Warnung.Für die
memcpy
Prototyp.inklusive string.h auch entfernt die Warnung. Danke.
InformationsquelleAutor cnicutar
Den
memcpy()
Funktion Verwendung ist folgende:wo
num
ist eine Reihe von bytes.Um dieses Problem zu beheben, müssen Sie verwenden Sie die folgende Weise:
Weil in der Regel die Größe eines integer ist
4
bytes (abhängig von der Plattform, compiler, etc).In Ihrem Programm, das Sie kopieren nur
10
bytes statt40
bytes. Also, in diesem Fall bekommen Sie die ersten "2,5
" Elemente initialisiert das arraya[]
und der rest Müll enthält.EDIT: Auch, Sie vergessen zu
#include <string.h>
, so dass dies bewirkt, dass die folgende Zusammenstellung Warnung:Für die Zukunft bitte geben Sie ein Augenmerk auf die compiler-Warnungen, wie es wird erlauben Sie, um zu vermeiden, eine Menge von run-time-Fehler.
InformationsquelleAutor Alex
Letzte parameter
memcpy
ist Anzahl der bytes zu kopieren, so sollte es seinmemcpy(a,b, 10 * sizeof(int));
InformationsquelleAutor Naveen
Müssen Sie fügen Sie
<string.h>
Letzten Parameter von memcpy ist "Anzahl der bytes zu kopieren". (übergeben Sie die Anzahl der Elemente)
InformationsquelleAutor Keine Lust