Odjechani.com.pl

Pełna wersja: [język C]Wyciąganie łańcuchów znakowych z pliku.
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Kolega, który też programuje i ma dłużej w tym siedzi niż ja, dał mi wyzwanie na zrobienie tego programu. Program ten wyciąga łańcuchy znakowe z pliku. Ciekawe daje wyniki po operacji na plikach *.exe. Program wywołuje się z wiersza poleceń. Jak chcesz zapisać wynik pracy programu do pliku tekstowego, to piszesz:
ten_program plik_źródłowy>plik_z_wynikami.txt
Może komuś się przyda ten program ;)
BTW. W stałych MIN i MAX jest zapisana minimalna i maksymalna długość łańcucha. Domyślny zakres to od 4 do 100.
Link do binarki: http://przeklej.org/file/GvYmW2/C.test.exe
#include <stdio.h>
#define MIN 4
#define MAX 100
char t[MAX];
inline void cls()
{
    int i;
    for(i=0;i<MAX;i++)t[i]='\0';
}
int main(int argc,char **argv)
{
    FILE *plik; register char a; unsigned long long int i,l=0; short x=1;
    if(argv[1]==NULL)
    {
        printf("Nie podano nazwy pliku.\n");
        return 1;
    }
    if((plik=fopen(argv[1],"rb+"))==NULL)
    {
        printf("Nie udalo sie otworzyc pliku %s.\nSprawdz czy na pewno istnieje.\n",argv[1]);
        return 1;
    }
    unsigned long long int size;
    fseek(plik,0,SEEK_END);
    fgetpos(plik,&size);
    fseek(plik,0,0);
    for(i=0;i<size;i++)
    {
        a=fgetc(plik);
        if(a>=' '&&a<='~')
        {
            t[l]=a;
            l++;
            x=1;
        }
        else if(x==1)
        {
            if(l<=MAX&&l>=MIN)
            {
                printf("%s",t);
                printf("\n");
            }
            x=0;
            l=0;
            cls();
        }
    }
    fclose(plik);
    return 0;
}
Całkiem ciekawe. Z plików .rar jest najdłuższy ciąg krzaczków, z .csv jest dość specyficzny, a z .png jest przyjebany :D
Najlepiej przetestuj to na jakimś pliku *.exe, tam będziesz miał już jakieś zrozumiałe napisy. Oto przykład użycia na jednym z moich wcześniejszych programów:

!This program cannot be run in DOS mode.
.text
P`.data
.rdata
@@/4
[email protected]
.idata
.CRT
.tls
B/29
B/41
B/55
$([email protected]
[email protected]
[email protected]
[email protected]
[email protected]
=([email protected]
D$$t
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
%[email protected]
%[email protected]
%[email protected]
%[email protected]
%[email protected]
%[email protected]
%`[email protected]
%\[email protected]
%[email protected]
%[email protected]
%@[email protected]
%[email protected]
%([email protected]
%[email protected]
%[email protected]
%<[email protected]
libgcj-13.dll
_Jv_RegisterClasses
Podaj z ilu cyfr maksymalnie ma sie skladac liczba(1-4): 
Podaj czy chcesz dodawac czy odejmowac(1-dodawanie,2-odejmowanie): 
Pierwsza liczba: %d
Druga liczba: %d
Blad
Podaj wynik: 
Dobra odpowiedz !
Czas odpowiedzi to: %f sekund
Zla odpowiedz.
Mingw runtime failure:
  VirtualQuery failed for %d bytes at address %p
  Unknown pseudo relocation protocol version %d.
  Unknown pseudo relocation bit size %d.
DeleteCriticalSection
EnterCriticalSection
ExitProcess
GetLastError
GetModuleHandleA
GetProcAddress
InitializeCriticalSection
LeaveCriticalSection
SetUnhandledExceptionFilter
TlsGetValue
VirtualProtect
VirtualQuery
__getmainargs
__p__environ
__p__fmode
__set_app_type
_cexit
_iob
_onexit
_setmode
abort
atexit
calloc
clock
exit
free
fwrite
memcpy
printf
puts
rand
scanf
signal
srand
time
vfprintf
KERNEL32.dll
msvcrt.dll
GNU C 4.7.1
../../../../src/gcc-4.7.1/libgcc/libgcc2.c
c:\crossdev\build\gcc-tdm32\mingw32\libgcc
unsigned int
short unsigned int
char
_iobuf
_ptr
_cnt
_base
_flag
_file
_charbuf
_bufsiz
_tmpfname
FILE
long long int
long int
short int
long unsigned int
sizetype
signed char
unsigned char
long long unsigned int
ix86_tune_indices
X86_TUNE_USE_LEAVE
X86_TUNE_PUSH_MEMORY
X86_TUNE_ZERO_EXTEND_WITH_AND
X86_TUNE_UNROLL_STRLEN
X86_TUNE_BRANCH_PREDICTION_HINTS
X86_TUNE_DOUBLE_WITH_ADD
X86_TUNE_USE_SAHF
X86_TUNE_MOVX
X86_TUNE_PARTIAL_REG_STALL
X86_TUNE_PARTIAL_FLAG_REG_STALL
X86_TUNE_USE_HIMODE_FIOP
X86_TUNE_USE_SIMODE_FIOP
X86_TUNE_USE_MOV0
X86_TUNE_USE_CLTD
X86_TUNE_USE_XCHGB
X86_TUNE_SPLIT_LONG_MOVES
X86_TUNE_READ_MODIFY_WRITE
X86_TUNE_READ_MODIFY
X86_TUNE_PROMOTE_QIMODE
X86_TUNE_FAST_PREFIX
X86_TUNE_SINGLE_STRINGOP
X86_TUNE_QIMODE_MATH
X86_TUNE_HIMODE_MATH
X86_TUNE_PROMOTE_QI_REGS
X86_TUNE_PROMOTE_HI_REGS
X86_TUNE_SINGLE_POP
X86_TUNE_DOUBLE_POP
X86_TUNE_SINGLE_PUSH
X86_TUNE_DOUBLE_PUSH
X86_TUNE_INTEGER_DFMODE_MOVES
X86_TUNE_PARTIAL_REG_DEPENDENCY
X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY
X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL
X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL
X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL
X86_TUNE_SSE_SPLIT_REGS
X86_TUNE_SSE_TYPELESS_STORES
X86_TUNE_SSE_LOAD0_BY_PXOR
X86_TUNE_MEMORY_MISMATCH_STALL
X86_TUNE_PROLOGUE_USING_MOVE
X86_TUNE_EPILOGUE_USING_MOVE
X86_TUNE_SHIFT1
X86_TUNE_USE_FFREEP
X86_TUNE_INTER_UNIT_MOVES
X86_TUNE_INTER_UNIT_CONVERSIONS
X86_TUNE_FOUR_JUMP_LIMIT
X86_TUNE_SCHEDULE
X86_TUNE_USE_BT
X86_TUNE_USE_INCDEC
X86_TUNE_PAD_RETURNS
X86_TUNE_PAD_SHORT_FUNCTION
X86_TUNE_EXT_80387_CONSTANTS
X86_TUNE_SHORTEN_X87_SSE
X86_TUNE_AVOID_VECTOR_DECODE
X86_TUNE_PROMOTE_HIMODE_IMUL
X86_TUNE_SLOW_IMUL_IMM32_MEM
X86_TUNE_SLOW_IMUL_IMM8
X86_TUNE_MOVE_M1_VIA_OR
X86_TUNE_NOT_UNPAIRABLE
X86_TUNE_NOT_VECTORMODE
X86_TUNE_USE_VECTOR_FP_CONVERTS
X86_TUNE_USE_VECTOR_CONVERTS
X86_TUNE_FUSE_CMP_AND_BRANCH
X86_TUNE_OPT_AGU
X86_TUNE_VECTORIZE_DOUBLE
X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL
X86_TUNE_AVX128_OPTIMAL
X86_TUNE_REASSOC_INT_TO_PARALLEL
X86_TUNE_REASSOC_FP_TO_PARALLEL
X86_TUNE_LAST
ix86_arch_indices
X86_ARCH_CMOV
X86_ARCH_CMPXCHG
X86_ARCH_CMPXCHG8B
X86_ARCH_XADD
X86_ARCH_BSWAP
X86_ARCH_LAST
float
complex float
double
complex double
long double
complex long double
__float128
__unknown__
func_ptr
_iob
__CTOR_LIST__
__DTOR_LIST__
c:/mingw32tdm/include
../../../../src/gcc-4.7.1/libgcc/../gcc/config/i386
../../../../src/gcc-4.7.1/libgcc
stdio.h
i386.h
gbl-ctors.h
libgcc2.c
.file
crt1.c
_atexit
__onexit
.text
.data
.bss
.file
cygming-crtbegin.c
.text
.data
.bss
.rdata
.jcr
.file
jaka_liczba.c
_main
.text
.data
.bss
.rdata
.file
tlssup.c
___xd_z
___xd_a
.text
.data
.bss
.CRT$XLD
.CRT$XLC
.rdata
.tls
.CRT$XLZ
.CRT$XLA
.tls$ZZZ
.tls$AAA
.CRT$XDZ
.CRT$XDA
.file
CRTglob.c
.text
.data
.bss
.file
CRTfmode.c
.text
.data
.bss
.file
txtmode.c
.text
.data
.bss
.file
cpu_features.c
.text
.data
.bss
.file
CRT_fp10.c
_fpreset 
.text
.data
.bss
.file
pseudo-reloc.c
.text
.data
.bss
.rdata
.file
gccmain.c
_p.1761
___main
.text
.data
.bss
.file
crtst.c
.text
.data
.bss
.file
tlsthrd.c
.text
.data
.bss
.file
.text
.data
.bss
.file
libgcc2.c
.text
.data
.bss
.text
.data
.bss
.idata$7
.idata$5
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5,
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5 
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5
.idata$4p
.idata$6b
.text
.data
.bss
.idata$7
.idata$5$
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5
.idata$4x
.idata$6
.text
.data
.bss
.idata$7
.idata$5
.idata$4t
.idata$6r
.text
.data
.bss
.idata$7
.idata$5
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5X
.idata$4
.idata$64
.text
.data
.bss
.idata$7
.idata$5L
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5H
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5T
.idata$4
.idata$6,
.text
.data
.bss
.idata$7
.idata$58
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5`
.idata$4
.idata$6F
.text
.data
.bss
.idata$7
.idata$5\
.idata$4
.idata$6>
.text
.data
.bss
.idata$7
.idata$5P
.idata$4
.idata$6$
.text
.data
.bss
.idata$7
.idata$54
.idata$4
.idata$6
.text
.data
.bss
.idata$7
[email protected]
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5d
.idata$4
.idata$6N
.text
.data
.bss
.idata$7
.idata$5(
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5D
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$50
.idata$4
.idata$6
.text
.data
.bss
.idata$7
.idata$5<
.idata$4
.idata$6
.file
fake
hname
fthunk
.text
.data
.bss
.idata$2
.idata$4p
.idata$5
.file
fake
.text
.data
.bss
.idata$4
.idata$5h
.idata$7
.text
.data
.bss
.idata$7|
.idata$5
.idata$4\
.idata$6
.text
.data
.bss
.idata$7d
.idata$5
.idata$4D
.idata$6
.text
.data
.bss
.idata$7l
.idata$5
.idata$4L
.idata$6
.text
.data
.bss
.idata$7p
.idata$5
.idata$4P
.idata$6
.text
.data
.bss
.idata$7
.idata$5
.idata$4h
.idata$6R
.text
.data
.bss
.idata$7
.idata$5
.idata$4d
[email protected]
.text
.data
.bss
.idata$7`
.idata$5
[email protected]
.idata$6
.text
.data
.bss
.idata$7
.idata$5
.idata$4`
.idata$62
.text
.data
.bss
.idata$7h
.idata$5
.idata$4H
.idata$6
.text
.data
.bss
.idata$7x
.idata$5
.idata$4X
.idata$6
.text
.data
.bss
.idata$7\
.idata$5
.idata$4<
.idata$6l
.text
.data
.bss
.idata$7t
.idata$5
.idata$4T
.idata$6
.file
fake
hname
fthunk
.text
.data
.bss
.idata$2
.idata$4<
.idata$5
.file
fake
.text
.data
.bss
.idata$4l
.idata$5
.idata$7
.file
cygming-crtend.c
.text
.data
.bss
.jcr
.text
.data
.bss
.idata$7
.idata$5
.idata$4|
.idata$6
__cexit
_free
_odp
_rand
___xl_c
_clock
___xl_z
_puts
_scanf
_srand
__dll__
_fwrite
_cyfry
_memcpy
__argc
___xl_a
___xl_d
__CRT_MT(
_start
__argv
_calloc
_time
_wybor
__fmode
__end__
_signal
_abort
_wynik
_stop
_exit
_printf
.eh_frame
.debug_aranges
.debug_info
.debug_abbrev
.debug_line
___mingw_CRTStartup
[email protected]
_mainCRTStartup
_WinMainCRTStartup
.eh_frame
___JCR_LIST__
___gcc_register_frame
___gcc_deregister_frame
[email protected]
[email protected]
___tlregdtor
___cpu_features_init
__fpreset
___report_error
___write_memory.part.0
__pei386_runtime_relocator
_was_init.31048
___do_global_dtors
___do_global_ctors
_initialized
___mingwthr_run_key_dtors.part.0
___mingwthr_cs
_key_dtor_list
____w64_mingwthr_add_key_dtor
___mingwthr_cs_init
____w64_mingwthr_remove_key_dtor
___mingw_TLScallback
pseudo-reloc-list.c
.debug_info
.debug_abbrev
.debug_aranges
.debug_line
___JCR_END__
_register_frame_ctor
.text.startup
.ctors.65535
[email protected]
___RUNTIME_PSEUDO_RELOC_LIST__
__imp___setmode
__data_start__
___DTOR_LIST__
[email protected]
.weak.__Jv_RegisterClasses.___gcc_register_frame
__imp___onexit
___p__fmode
[email protected]
[email protected]
[email protected]
___tls_start__
[email protected]
__libmsvcrt_a_iname
[email protected]
[email protected]
__rt_psrelocs_start
__imp__abort
__imp__clock
__dll_characteristics__
__size_of_stack_commit__
__size_of_stack_reserve__
__major_subsystem_version__
___crt_xl_start__
___crt_xi_start__
___crt_xi_end__
__imp__rand
[email protected]
__imp____p__environ
[email protected]
_mingw_initltsdrot_force
__imp___iob
[email protected]
__bss_start__
___RUNTIME_PSEUDO_RELOC_LIST_END__
__size_of_heap_commit__
__imp__srand
___p__environ
[email protected]
[email protected]
___crt_xp_start__
___crt_xp_end__
__imp__signal
__imp__puts
__minor_os_version__
__imp__atexit
__head_libmsvcrt_a
__image_base__
__imp__exit
__section_alignment__
__IAT_end__
__RUNTIME_PSEUDO_RELOC_LIST__
__imp____p__fmode
__tls_start
[email protected]
__data_end__
___getmainargs
__CTOR_LIST__
___set_app_type
__bss_end__
__CRT_fmode
__imp__scanf
___crt_xc_end__
__tls_index
___crt_xc_start__
___CTOR_LIST__
__rt_psrelocs_size
__imp__memcpy
__file_alignment__
__imp__time
[email protected]
__major_os_version__
__IAT_start__
__tls_end
[email protected]
__DTOR_LIST__
[email protected]
__size_of_heap_reserve__
___crt_xt_start__
___ImageBase
__subsystem__
__imp__calloc
__Jv_RegisterClasses
__imp____getmainargs
___tls_end__
[email protected]
_mingw_initltssuo_force
[email protected]
___cpu_features
__imp__free
[email protected]
__major_image_version__
__loader_flags__
__CRT_glob
__setmode
__imp__printf
__head_libkernel32_a
__rt_psrelocs_end
__imp___cexit
__minor_subsystem_version__
__minor_image_version__
__imp__vfprintf
__imp____set_app_type
_mingw_initltsdyn_force
[email protected]
[email protected]
[email protected]
__RUNTIME_PSEUDO_RELOC_LIST_END__
__libkernel32_a_iname
___dyn_tls_init_callback
__tls_used
___crt_xt_end__
_vfprintf
[email protected]
__imp__fwrite