J'ai cette structure en exemple C:
typedef struct
{
const char * array_pointers_of_strings [ 30 ];
// etc.
} message;
J'ai besoin de copier ce tableau_pointers_of_strings vers un nouveau tableau pour trier les chaînes. Je n'ai besoin que de copier l'adresse.
while ( i < 30 )
{
new_array [i] = new_message->array_pointers_of_strings [i];
// I need only copy adress of strings
}
Ma question est: comment allouer new_array [i] par malloc () à la seule adresse des chaînes?
Comme je peux le comprendre à partir de votre déclaration d'affectation dans la boucle while, je pense que vous avez plutôt besoin d'un tableau de chaînes:
char** new_array;
new_array = malloc(30 * sizeof(char*)); // ignore casting malloc
Remarque: En faisant =
dans la boucle while comme ci-dessous:
new_array [i] = new_message->array_pointers_of_strings [i];
vous attribuez simplement l'adresse de la chaîne (ce n'est pas une copie complète), mais parce que vous écrivez également " uniquement l'adresse des chaînes " donc je pense que c'est ce que tu veux.
Edit: waring "l'affectation rejette les qualificatifs du type cible du pointeur"
vous recevez cet avertissement car vous attribuez un const char*
à char*
qui violerait les règles de const-correctness.
Vous devez déclarer votre new_array comme:
const char** new_array;
ou supprimez const
dans la déclaration de 'array_pointers_of_strings' de la restriction de message.
Cette:
char** p = malloc(30 * sizeof(char*));
allouera un tampon suffisamment grand pour contenir 30 pointeurs vers char
(ou des pointeurs de chaîne, si vous voulez) et assignera à p
son adresse.
p[0]
est le pointeur 0, p[1]
est le pointeur 1, ..., p[29]
est le pointeur 29.
Ancienne réponse ...
Si je comprends bien la question, vous pouvez soit en créer un nombre fixe en déclarant simplement des variables de type message
:
message msg1, msg2, ...;
ou vous pouvez les allouer dynamiquement:
message *pmsg1 = malloc(sizeof(message)), *pmsg2 = malloc(sizeof(message)), ...;
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_LEN 2
typedef struct
{
char * string_array [ ARRAY_LEN ];
} message;
int main() {
int i;
message message;
message.string_array[0] = "hello";
message.string_array[1] = "world";
for (i=0; i < ARRAY_LEN; ++i ) {
printf("%d %s\n",i, message.string_array[i]);
}
char ** new_message = (char **)malloc(sizeof(char*) * ARRAY_LEN);
for (i=0; i < ARRAY_LEN; ++i ) {
new_message[i] = message.string_array[i];
}
for (i=0; i < ARRAY_LEN; ++i ) {
printf("%d %s\n",i, new_message[i]);
}
}