Массив строк. Неверно выводится на экран - C (СИ)

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

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

#include "stdafx.h"
#include <conio.h>
#include <locale.h>
#include <string>
 
char *buf;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"RUS");
    char filename[20]={};
   // printf("Введите название файла:");
    //gets(filename);
    FILE*f=fopen("file.txt","rt");
    if ((f = fopen("file.txt", "rt")) == NULL )
    {  
        printf("Не удается открыть файл!");
        exit(1);
    }
    fseek(f,0,SEEK_END);
    int size_of_file=ftell(f);
    fseek(f,0,SEEK_SET);
    buf=(char*)malloc(size_of_file+1);
    buf[size_of_file+1]=0;
    fread(buf,size_of_file,1,f);
    puts(buf); 
    //char str1[100]={};
 
    char rez[100]={};
    int cnt=0;
    char exit[5]="exit";
 
    int len=255; //Длина строки
 
    char **Massiv=(char**)malloc((size_of_file+1)*sizeof(char)); 
    for (int i=0;i<(size_of_file+1);i++) 
        Massiv[i]=(char*)malloc(len);
    int cntmass=0;
    while(cnt<size_of_file-2)
    {
        int i=cnt,cntrez=0;
        for(i;i<size_of_file;i++,cntrez++)
        {
            if(buf[i]!=' ')
                rez[cntrez]=buf[i];
            else
            {
                cnt=i;
                break;
            }
        }
        Massiv[cntmass]=rez;
        printf("%s ",Massiv[i]);
        cntmass++;
        int y=strlen(rez);
        for(int j=0;j<=y;j++)
            rez[j]=0;
        cnt++;
        if(i==size_of_file)
        {
            cnt=i;
        }
        }
    /*for(int i=0;i<cntmass;i++)
        printf("\n%s\n",Massiv[i]);*/
    free(Massiv);
    fclose(f);
    getch();
    return 0;
}
Хотелось бы узнать такую вещь: вот я создала массив строк, записывается туда все нормально(в этот массив строк Massiv я записываю слова, которые я получила из файла, т. е. из буфера buf, обработала пробелы, ну, то есть выделила слова в строке). Но почему-то вместо правильных слов из Massiv выводится какая-то ерунда. Где ошибка? Заранее спасибо всем за помощь.

Решение задачи: «Массив строк. Неверно выводится на экран»

textual
Листинг программы
Massiv[i]=(char*)malloc(len);
memset(Massiv[i],0,len); //Инициализация нулями;

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

  1. Massiv - это массив, который будет содержать строки.
  2. i - это индекс, который используется для обращения к каждому элементу массива.
  3. len - это длина каждой строки в массиве.
  4. Massiv[i] - это обращение к элементу массива по его индексу.
  5. malloc - это функция, которая выделяет память для переменной типа char*.
  6. memset - это функция, которая заполняет область памяти определенными значениями. В данном случае, она заполняет память, выделенную для элемента массива, нулями.

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

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