Return string array in c

0

I'm trying to return an array of strings to use later in main.

Here is my function:

char **separar_palavras2() {
setlocale(LC_ALL, "Portuguese");
FILE *arquivo;
arquivo = fopen(ftexto, "r");
int i = 0, j = 0;
char* linhas[50];
char line[200];
char *palavra_linha[200];
char *palavras_finais[200];
char *palavras_finais2[200] = {NULL};
char points[200];
int rep = 0;
int p = 0;


while(fgets(line, sizeof line, arquivo) != NULL) {

    int w = 0;

    while (line[w])
    {
        if (ispunct (line[w])) {
            points[p] = line[w];
            p++;
        }
        w++;
    }

    linhas[i] = strdup(line); // Separa as linhas do texto e guarda na string "linhas"

    palavra_linha[i] = strtok (linhas[i], " \n\r.,!?");
    while (palavra_linha[i] != NULL) {
        palavras_finais[j] = palavra_linha[i];
        j++;
        palavra_linha[i] = strtok (NULL, " \n\r.,!?");
    }
    i++;
}

j = 0;
for(int k = 0; palavras_finais[k] != NULL; k++) {
    if (k == 0) {
        palavras_finais2[0] = palavras_finais[k];
    } else {
        rep = 0;
        for (int a = 0; palavras_finais2[a] != NULL; a++) {
            if (strcmp(palavras_finais[k], palavras_finais2[a]) == 0) {
                rep++;
            }
        }

        if (rep == 0) {
            j++;
            palavras_finais2[j] = palavras_finais[k];
        }
    }
}

printf("-- Sinais de Pontuação no texto --\n");
for (int b = 0; b < p; b++) {
    printf("%c ", points[b]);
}

printf("\n\n-- Palavras no texto --\n\n");
for(int m=0; palavras_finais2[m] != NULL; m++) {
    printf("%s\n", palavras_finais2[m]);
}

return palavras_finais2; 
}

This is the main:

char**palavras_finais;
int size = 0;
palavras_finais = create_dyn_array_strings(palavras_finais, &size);
char** palavras_finais = separar_palavras2();

Here is the function to allocate memory for the variable 'final_words':

char ** create_dyn_array_strings(char **pps, int *psize) {
char **ppnew= NULL;
int i;

if(pps == NULL){
    *psize=30;
    ppnew = (char**) calloc(*psize, sizeof(char*));
    return ppnew;
}

*psize *=2;
ppnew=(char**) realloc(pps , *(psize)*sizeof(char*));

for(i=*psize-1; i >= (*psize-30); i--)
{
    *(ppnew+i)=NULL;
}


return ppnew;
}

Sorry, I'm new to c. If it is not possible to return the array of strings, I would like you to show me an alternative to use the function result in main.

    
asked by anonymous 27.12.2017 / 02:20

0 answers