Тема: Не виходить міняти слова місцями
При введенні з файлу все працює чудово,однак коли отримуємо речення з клавіатури чомусь останній символ останнього слова(в кінці програми вже першого) зникає.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define S 15
#define MAX 150
int ReadFile(char** str);
void ReverseStrings(char* str);
void ShowStrings(int len, char** str);
int main()
{
system("chcp 1251");
int length = S;
char** strings = (char**)malloc(S * sizeof(char*));
char buffer[MAX];
int number;
puts("Отримати дані з клавіатури чи файлу? 1 - file, будь-яке інше число - keyboard");
scanf("%i", &number);
if (number == 1)
{
length = ReadFile(strings);
puts("Речення:\n");
ShowStrings(length, strings);
puts("\n");
}
else
{
puts("Введіть речення (0 - кінець)");
for (length = 0; length < S; )
{
gets_s(buffer);
if (strcmp(buffer, "0") == 0)
{
break;
}
strings[length] = (char*)malloc(strlen(buffer) + 1);
strcpy(strings[length++], buffer);
}
}
puts("\nРечення в зворотньому порядку слів\n");
for (int i = 0; i < length; i++)
ReverseStrings(strings[i]);
for (int ii = 0; ii < length; ii++)
{
if (strings[ii])
free(strings[ii]);
}
free(strings);
system("pause");
return 0;
}
int ReadFile(char** str)
{
char filename[20];
char buf[100] = { 0 };
int j = 0;
FILE* file;
if ((file = fopen("D:\\textlab\\lab08.txt", "r+")) == NULL)
{
puts("Error orening file");
return 0;
}
else
{
while (fgets(buf, 100, file) != NULL)
{
str[j] = (char*)malloc(strlen(buf) + 1);
strcpy(str[j], buf);
j++;
}
fclose(file);
return j;
}
return 0;
}
void ReverseStrings(char* str)
{
char* reverse = (char*)malloc((strlen(str) + 1));
int len, i, index, wordStart, wordEnd;
len = strlen(str);
index = 0;
wordStart = len - 2;
wordEnd = len - 2;
while (wordStart > 0)
{
if (str[wordStart] == ' ')
{
i = wordStart + 1;
while (i <= wordEnd)
{
reverse[index] = str[i];
i++;
index++;
}
reverse[index++] = ' ';
wordEnd = wordStart - 1;
}
wordStart--;
}
for (i = 0; i <= wordEnd; i++)
{
reverse[index] = str[i];
index++;
}
reverse[index] = '\0';
printf("%s\n", reverse);
free(reverse);
}
void ShowStrings(int len, char** str)
{
for (int i = 0; i < len; i++)
printf("%s", str[i]);
}