Do you just want to invert a string, or 20 string’s ? , because in this code you put the scanf to pick up a string that is in a vector of 20 string’s and that can have a maximum of 20 characters each , but did not use any loop of repetition , so it will only take even a string , and since the scanf command only takes the characters typed on the keyboard until it finds a blank space, then it will only have a word of up to 20 characters , and the other vector named "word" is inside the while loop and picking up each phrase and putting it together , but does nothing else , and then being the message even though you want to reverse , then your code could be like this :
#include <stdio.h>
#include <string.h>
int main( )
{
char palavra[256] = {0},aux[256];
char mensagem [20][21] = {0}, mensagemInvertida [20][21] = {0};
printf("mensagemInvertida -> %s\n",mensagemInvertida);
int numP = 0;
int i = 0, j = 0;
char erro = 0;
printf ("Insira a sua mensagem de ate 20 palavras: ");
scanf ( "%s", mensagem[j] ); // mensagem é um vetor que pode armazenar
// até 20 string's de 20 caracteres cada
// assim precisa saber qual a posição desse vetor
// e j informará tal posição , e scanf nesse caso
// irá pegar os caracteres até encontrar um espaço
// em branco , portanto apenas uma unica palavra
fflush(stdin);
setbuf(stdin,NULL);
while( aux[0] != '.' && numP < 20)// aqui vai pegar até 20 palavras que tenha no
{ // maximo 20 caracteres
gets( aux ); // gets está eliminada da linguagem c , só funciona em
// compiladores do século passado
/* // em compiladores do século passado , no lugar desse
// " gets " , use o fgets , melhor que scanf , pois pega
// todos os caraceres digitados e até o newLine
if(strlen(palavra) > 20) // if desnecessário , pois strlen (palavra)
// nunca será maior que 20
{
erro = 1;
}
*/
//strncpy(mensagem[numP], palavra, strlen(palavra)); seria melhor usar strcat
strcat( palavra, aux ); // adiciona a palavra 'aux' digitada na palavra frase
strcat( palavra, " "); // adiciona um espaço na frase depois dessa palavra inserida
numP++; // incrementa o contador de palavras
}
printf("Sua MensaGem -> %s\n",mensagem[j]);// escreve a frase , apenas para verificação
printf("Sua Frase ----> %s\n",palavra );// escreve a frase , apenas para verificação
int tam = 0;
while( mensagem[j][tam] )tam++; // vai do começo até encontrar um caractere que não seja espaço
printf("tamanho da mensagem -> %d\n",tam);
mensagemInvertida[j][tam] = '\0';
int len = tam;
tam--;
for(i=0; mensagem[j][i] != '\0'; i++)
{
mensagemInvertida[j][tam] = mensagem[j][i];
printf("%c",mensagemInvertida[j][tam]);
tam--;
}
printf("\nString mensagemInvertida -> %s\n",mensagemInvertida[j]);
i = 0;
if (erro == 0)
{
printf ("\nSua mensagem invertida eh -------: %s\n",mensagemInvertida);
printf ("Ou usando um laco de Repeticao\n\
\rSua mensagem invertida pode ser -: ");
for (i = 0; i<len; i++)
{
printf("%c", mensagemInvertida[j][i]);
}
}
else
{
printf("Palavras com letras demais");
}
printf("\n\n\n");
return 0;
}