Chcecie poprawek ? Oki ... ;p
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
int main(int argc, char* argv[]){
char* text = new char[1024];
fscanf(stdin,"%1023[^\n]", text); // 1023 znaki + miejsce na 0
char* start = strstr( text, "func:" );
if(!start)return 1;
//delete text; // nie tu!!!
char* end = strchr( start, '/' ); // to jest lepsze od strstr - tylko jeden znak
if(!end)end=strchr(start,0); // gdy brak terminatora, to cala linia
int len = end - start; // wskazniki mozna odejmowac
char* wynik = new char[len + 1];
strncpy( wynik, start, len )[len]=0; // i zapomniales o 0 na koncu
delete text; // dopiero tu mozna zwolnic - po skopiowaniu
cout << wynik;
ofstream out( "c:\\pllik.txt", ios::app );
if (!out) return 1;
out << wynik << endl;
out.close();
delete wynik;
getch();
return 0;
}
[dopisane]
błedy Krecik zrobiles takie:
- w fscanf 1023 znaki, bo inaczej moze byc access violation
- delete przeniesc nizej, bo access violation lub zamazanie=utrata danych
- brak zera na koncu ciagu tworzonego przez strncpy. (bo np. access violation lub przeklamanie w danych)
// błedy access violation moga wystapic, ale nie musza w zaleznosci od systemu i trybu docelowego, nie mniej jednak są to błędy, ale utrata danych jest zalezna tylko od tego czy system nie zamaze tego kawalka zaraz po zwolnieniu, natomiast przeklamanie, zalezy od tego, czy nie bylo w pamieci jakichs smieci przed przydzieleniem - stad potrzeba zapisania tego 0 na koncu.
// reszta to kosmetyka, ale ze zwroceniem uwagi na szybkosc kodu (end-start jest na pewno szybsze od przerabiania danych przez strlen())
// Krecik nie przejmuj sie, to bardziej dla jaj, ale sam wywolałes wilka z lasu w pkt. 1)