Mit memset, um ein array
Ich bin ein Neuling auf C noch, und ich habe ein problem mit der memset-Funktion.
Gebe ich einen char * an eine Funktion, und in dieser Funktion habe ich ein array erstellen, und verwenden Sie dann memset einstellen der einzelnen Werte. Ich habe mit dbx zu beobachten, diese variable beim Eintritt in die Funktion, und aus irgendeinem Grund wird es auf "" nachdem wir pass memset.
Erstens, warum ist das so? Ich gehe davon aus, dass memset werden müssen zurücksetzen den Speicher, wo der char * ist?
Zweitens gibt es einen besseren Weg, um jedes element als "0"?
Hier ist mein code:
static char *writeMyStr(char *myStr, int wCount) {
//here myStr is set to "My String is populated"
char **myArr;
myArr = (char **) malloc(sizeof(char *) * wCount);
memset(myArr, 0, sizeof(char *) * wCount); //myStr is set to ""
... populate array ...
}
Diese Leute sind Idioten. Der Rückgabewert von malloc ein void *. Sie können nichts tun, ohne casting, entweder implizit oder explizit.
Das ist C, nicht C++. In C++ müssen Sie Stimmen.
Oder vielleicht sind diese Menschen einfach wissen, C.
Es sei denn, Sie benötigen, rufen Sie
in C, wenn Sie nicht wirken, lint wird (richtig) beschweren. Ist es eigentlich möglich in C Zeiger unterschiedliche Größen haben und für eine uncast Zuordnung zu verlieren Dinge.
Das ist C, nicht C++. In C++ müssen Sie Stimmen.
Oder vielleicht sind diese Menschen einfach wissen, C.
Es sei denn, Sie benötigen, rufen Sie
malloc
, weil Sie haben, um die Interaktion mit C-code, zum Beispiel.in C, wenn Sie nicht wirken, lint wird (richtig) beschweren. Ist es eigentlich möglich in C Zeiger unterschiedliche Größen haben und für eine uncast Zuordnung zu verlieren Dinge.
InformationsquelleAutor Doug Molineux | 2012-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie auf der Suche nach der null das Zeichen oder null-Nummer? Beim initialisieren ein array, etwa so:
Entspricht es
Weil
0=='\0'
. Die Länge eines string ist die position der ersten null-terminator, so dass Ihr string mit null-Länge, da die array-Unterstützung, die Sie mit Nullen gefüllt. Der Grund, warum Menschen dies tun ist, so dass Sie die Dinge hinzufügen, um die Zeichenkette, die Sie nicht brauchen, um re-null-terminate it.Wenn Sie möchten, dass Ihre Zeichenfolge "0000"... das Zeichen null:
Aber denken Sie daran, null-terminate it:
InformationsquelleAutor Dave
Wenn Sie versuchen, eine null-füllen Sie das array zunächst, es ist besser, verwenden Sie calloc statt malloc.
Alle malloc gibt er Ihnen einen Speicherblock, der mit zufälligen, unbestimmten Werte. In der Erwägung, dass calloc gibt Sie einen block von Speicher-und null-füllt, so dass Sie nicht haben, junk in da.
und dies ist ein Versuch, zu beantworten, den zweiten Teil seiner Frage, ob es eine bessere Möglichkeit der Einstellung jedes element auf null. Eliminiert die Notwendigkeit für ein memset und geben mehr Spielraum bei der Festlegung, was genau ist das clearing-myStr.
InformationsquelleAutor ardent