Darcamo está correto na interpretação sobre "strings" em C.
Eis uma possível solução para o seu problema:
#include <malloc.h>
#include <stdio.h>
#include <string.h>
static const char STR1[] = "String 1";
static const char STR2[] = "String 2";
/* Um macrozinho só para facilitar a vida... */
#define COPY_CONS_STRING(a, i, s) \
(a)[(i)] = (char *)malloc(sizeof(char)*strlen((s))+1); \
strcpy((a)[(i)], (s));
/*
Como o array de strings pode ser definido como um "char **",
precisamos passar um "char ***" para podermos alocar o vetor e retorná-lo.
*/
int GetStringArray(char ***strArray)
{
char **out;
#define NUM_ITEMS 2
out = (char **)malloc(sizeof(char *) * NUM_ITEMS);
COPY_CONST_STRING(out, 0, STR1);
COPY_CONST_STRING(out, 1, STR2);
*strArray = out;
/* Retorna o número de strings no array de strings */
return NUM_ITEMS;
}
/* Libera strings alocadas */
void FreeStringArray(char **strArray, int count)
{
int i;
for (i = 0; i < count; i++)
{
free(strArray[i]);
strArray[i] = NULL;
}
free(strArray);
}
int main(int argc, char **argv)
{
int strCount, i;
char **strings;
/* Pega array de strings */
strCount = GetStringArray(&strings);
for (i = 0; i < strCount; i++)
printf("%s\n", strings[i]);
/* Libera array de strings */
FreeStringArray(strings, strCount);
return 0;
}
Mas, você pode achar mais fácil mexer com a STL, em C++, usando os templates/classes "vector" e "string".
[]s
Fred