Нет, все равно еще вопросы остались...
Например надо вызвать fillrand 5 раз с k=1000 до 5000.
Как это сделать?
Пробовал просто задать char *s_random = new char[5000]; но так появляются всякие лишние символы в строке.
Даже самое длинное путешествие начинается с первого шага.
Чего-то у тебя все не правильно, почитай по поводу выделения памяти поподробнее. Кроме того все строки должны оканчиваться 0 и выделенную памят следует всетаки удалать.
Что-то типа того должно быть.
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#define filename "c:/temp/saod.txt"
char *fillrand(int k)
{
int i;
char *s_random = new char[k+1]; // Зачем тебе создавать 1000 элементов когда ты точно знаешь сколько тебе надо?
// + 1 для последнего нолика (строка всегда оканчивается на 0!)
for (i=0;i<k;i++)
s_random[i]=random(25)+97;
s_random[k] = 0; // добавили ноль
return s_random;
}
main()
{
clrscr();
char *s; // Тут не надо выделять пямять, т.к. мы выделим её в функции fillrand
randomize();
s=fillrand(1000);
FILE *f=fopen(filename,"w+");
if (f==NULL)
{
printf("\nCant open file!");
getche();
return 0;
}
fputs(s,f);
fclose(f);
delete[] s; // НЕ ЗАБЫВАЕМ удалить выделенный кусок
getche();
return 1;
}
Я не могу понять что не так теперь-то. Как в этих вот функциях сортировки память надо распределять? По книжке Подбельского пытался посмотреть, там как-то стремно написано. Мож кто подскажет в инете инфу по этому разделу?
Вообще-то плохая манера выделять память внутри функции, а удалять её за пределами функции. Получается так, что если ты не вызовешь вначале функцию fillrand(), то весь последующий код работать не будет. Функции должны принимать указатель на уже имеющийся массив памяти или выделять её и удалять внутри себя. В твоём примере лучше было бы использовать статический массив или локальный массив внутри функции main().