Си. Почему возникает предупреждение о неподходящем типе?
Компилятор выдает ошибку о том, что в 148 строке в функцию fprintf, подается указатель char*, хотя ожидается wchar_t. Я указатель str определял в структуре как wchar_t, и заполнял его с помощью getwchar(), почему тогда компилятор выдает предупреждение?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wctype.h>
#include <wchar.h>
#include <locale.h>
#define MEM_STEP 20
struct Text {
struct Sentence **text;
int size;
int n;
};
struct Sentence {
wchar_t *str;
int size;
};
struct Sentence *read_sentence(){
int size = MEM_STEP;
wchar_t *buf = (wchar_t*)malloc(size * sizeof(wchar_t));
wchar_t temp = getwchar();
int n = 0;
do{
if (n >= size - 2) {
wchar_t *buf = (wchar_t*)realloc(buf, size + MEM_STEP);
size += MEM_STEP;
}
buf[n] = temp;
temp = getwchar();
n++;
}while (temp != '.' && temp != '\n');
buf[n] = temp;
buf[n + 1] = '\0';
if (buf[0] == '\n') {
buf++;
}
struct Sentence *sentence = (struct Sentence*)malloc(sizeof(struct Sentence));
sentence->str = buf;
sentence->size = size;
return sentence;
}
int is_sent_unique(struct Sentence** txt, struct Sentence* sent, int n){
for(int i = 0; i < n; i++){
int k = 0;
for(int j = 0; j < wcslen(sent->str); j++){
if (towupper(txt[i]->str[j]) == towupper(sent->str[j]))
k++;
}
if(k == wcslen(sent->str) && k == wcslen(txt[i]->str))
return 0;
}
return 1;
}
struct Text read_text(){
int size = MEM_STEP;
struct Sentence **text = (struct Sentence**)malloc(size * sizeof(struct Sentence*));
struct Sentence *temp;
int n = 0;
int nlcount = 0;
do{
temp = read_sentence();
if (n >= size - 2) {
struct Sentence **t = (struct Sentence **)realloc(text, (size + MEM_STEP)* sizeof(struct Sentence *));
if (!t) {
puts("Allocation error");
}
text = t;
size += MEM_STEP;
}
if(temp->str[0] == '\n' && temp->str[1] == '\0'){
nlcount++;
}else{
while (temp->str[0] == '\t' || temp->str[0] == ' ' || temp->str[0] == '\n') {
temp->str++;
}
if (is_sent_unique(text, temp, n)){
text[n] = temp;
n++;
}
nlcount = 0;
}
}while (nlcount < 2);
struct Text txt;
txt.text = text;
txt.size = size;
txt.n = n;
return txt;
}
int main()
{
setlocale(LC_ALL, "");
int func_numb = 0;
puts("Введите текст, по окончании ввода нажмите два раза Enter:");
struct Text main_text = read_text();
puts("Введите номер одного из доступных действий:\n1.Для каждого предложения вывести строку-дату вида “ДД-ММ-ГГГГ”, где день - количество слов в предложении, месяц - наибольшая длина слова в предложении, год - общее количество символов в предложении + 1900.\n2.Вывести предложения так, чтобы слова шли в обратном порядке.\n3.Отсортировать предложения по длине первого слова в предложении.\n4.Удалить все предложения у которых все слова имеют длину не больше 3 символов.");
scanf("%d", &func_numb);
switch (func_numb)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
printf("Данные некорректны\n");
}
for (int i = 0; i < main_text.n; i++) {
wprintf("%s\n", main_text.text[i]->str);
}
printf("Количество предложений %d", main_text.n);
for (int i = 0; i < main_text.size; i++) {
free(main_text.text[i]);
}
free(main_text.text);
return 0;
}