Массив строк. Неверно выводится на экран - 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;
}Решение задачи: «Массив строк. Неверно выводится на экран»
textual
Листинг программы
Massiv[i]=(char*)malloc(len); memset(Massiv[i],0,len); //Инициализация нулями;
Объяснение кода листинга программы
Massiv- это массив, который будет содержать строки.i- это индекс, который используется для обращения к каждому элементу массива.len- это длина каждой строки в массиве.Massiv[i]- это обращение к элементу массива по его индексу.malloc- это функция, которая выделяет память для переменной типаchar*.memset- это функция, которая заполняет область памяти определенными значениями. В данном случае, она заполняет память, выделенную для элемента массива, нулями.