Неправильное преобразование типа void to char - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Стоит задача... написать прогу , которая считает количество введенных символов и выводит вероятность нахождения каждого символа в строке. Для начала я хочу узнать количество символов, которое я помещаю в переменную t. Потом хочу динамически выделить память для массива размером t элементов, но на этом этапе у меня выходит ошибка. Только начинаю дружить с си и адресной арифметикой не ругайте строго) в чем проблема не знаю...
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
 
int main(void)
{
  char *p;
  char ch;
  int t=0;
  printf("input some text\nfor exit input . \n");
 
  do 
  {
    ch = getchar();
    t++;
  } while (ch != '.');
    printf("%d",t);
  p = malloc(t*sizeof(char));
  
  return 0;
}
18 28 D:\programing\test\main.cpp [Error] invalid conversion from 'void*' to 'char*' [-fpermissive]

Решение задачи: «Неправильное преобразование типа void to char»

textual
Листинг программы
#include "string.h"     // strcspn
#include "stdio.h"      // fgets
 
double* char_freq(const char* str)
{
    static double freq[256];
    int i;
    for( i = 0; i < 256; ++i ) { freq[i] = 0.0; }
    double sum = 0.0;
    while( i = (unsigned char) *str++ ) {
        freq[i] += 1.0;
        sum += 1.0;
    }
    if( sum != 0.0 ) {
        for( i = 0; i < 256; ++i ) { freq[i] /= sum; }
    }
    return freq;
}
 
void chomp(char* str)
{
    str += strcspn(str, ".\n");
    *str = '\0';
}
 
int main(void)
{
    char buf[100];
    while( fgets(buf, sizeof(buf), stdin) ) {
        chomp(buf);
        double* freq = char_freq(buf);
        int i;
        for( i = 0; i < 256; ++i ) {
            if( freq[i] != 0.0 ) { printf("Frequency of %c = %f\n", (char) i, freq[i]); }
        }
    }
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: string.h (для функции strcspn) и stdio.h (для функции fgets).
  2. Определяем функцию char_freq, которая принимает на вход указатель на строку (const char str) и возвращает массив частот (double) для каждого символа в строке.
  3. Создаем статический массив double freq[256] для хранения частот каждого символа.
  4. В функции main создаем буфер (buf) для чтения строк из стандартного ввода.
  5. В цикле while считываем строки с помощью функции fgets и вызываем функцию chomp для удаления символов новой строки и точки.
  6. Вызываем функцию char_freq для вычисления частоты каждого символа в строке.
  7. В цикле for выводим каждую частоту, которая не равна нулю, с помощью функции printf.
  8. Возвращаем 0 в конце функции main, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5
Похожие ответы