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.