Je to semestrálka,kterou sem nedělal já,ale kamarád.Je to dělaný v Linuxu a moc tomu abych se přiznal nerozumím.Nutně potřebuji,aby do zítra fingovala,jinak sem v čudu.Tohle mi bylo sděleno:Jak uz jsem psal, chyba je v radku: while( fread(c,1,1,fh) > 0 ) {
To, ze ti to funguje, neni vec linuxu, ale spise nahody, protoze ukladas
nacteny znak na nahodnou adresu, a to ti nekdy vyjit muze (kdyz nahodne
adresovany prostor je tveho prg.) a nekdy taky ne. No je to stejna
chyba, jako se zpocatku casto dela ve funkci scanf() (urcite jsi nebyl
vyjimka). Podivej se na hlavicku funkce freda() a zkontroluj, jestli
vsechny argumenty jsou spravnych typu.
Moc prosím o pomoc.Předem díky
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void itob( int i, char *s )
{
strcpy( s, "00000000" );
s = s + 8;
i = i & 0xff;
do {
*--s = (i&1?'1':'0');
i >>= 1;
} while(i);
}
int main(int argc, char ** argv, char ** envv)
{
int i = 0, rows = 20;
char *FileName = 0;
int ChangePos = -1;
int ChangeVal = -1;
/*
while( envv[i][0] != '\0' ) {
printf(">>> %s\n", envv[i] );
i++;
}
printf( "Pocet radku: %d\n", rows );
*/
// Nacteni parametru z prikazove radky
for( i=0; i<argc; i++) {
if( argv[i][0] == '-' ) {
// Jedna se o volbu
switch (argv[i][1]) {
case 'h':
printf("Pouziti:\n");
printf("\tfmon File_Name ... zobrazi obsah souboru File_Name po znacich.\n");
printf("\tfmon -c Change_Pos Change_Val ... zmeni znak na pozici Change_Val\n");
printf("\t na hodnotu Change_Val (dekadicky)\n");
printf("\n");
return 0;
case 'c':
ChangePos = atoi( argv[++i] );
ChangeVal = atoi( argv[++i] );
break;
} // switch druh volby
} // if volba
else
{
// Jedna se o jmeno souboru
FileName = argv[i];
}
} // for kazdy parametr radky
// Kontrola nactenych parametru
if( ! FileName ) {
printf( "Chybi jmeno souboru.\n" );
return -1;
}
if( (ChangePos>=0) && (ChangeVal<0) ) {
printf( "Chybi nova hodnota znaku pro zmenu v souboru.\n" );
return -3;
}
// Mame vse, zaciname :-)
printf( "Soubor: %s\n", FileName );
if( ChangePos>=0 ) {
// Budem jen menit znak v souboru
FILE * fh = fopen( FileName, "r+b" );
if( fh != NULL ) {
if( fseek(fh, ChangePos, SEEK_SET)==0 ) {
printf("Menim znak na pozici %d na hodnotu %d.\n",ChangePos,ChangeVal);
fputc(ChangeVal,fh);
} else {
printf("Nemuzu prejit na pozici %d.\n",ChangePos);
}
fclose(fh);
}
} else {
// Budem zobrazovat cely soubor
FILE * fh = fopen( FileName, "rb" );
if( fh != NULL ) {
int i = 0;
unsigned char c;
char desc[10], b[9];
printf( "%s\t%s\t%s\t%s\t%s\n", "adresa","znak","ascii (d)","ascii (h)","ascii (b)" );
while( fread(c,1,1,fh) > 0 ) {
// while( !feof(fh) && ( (c=fgetc(fh)) >= 0 ) ) {
desc[0] = c;
desc[1] = '\0';
switch( c ) {
case 0: strcpy( desc, "NULL"); break;
case 7: strcpy( desc, "BELL"); break;
case 8: strcpy( desc, "BS" ); break;
case 9: strcpy( desc, "TAB" ); break;
case 10: strcpy( desc, "LF" ); break;
case 12: strcpy( desc, "FF" ); break;
case 13: strcpy( desc, "CR" ); break;
case 27: strcpy( desc, "ESC" ); break;
}
itob( c, b );
printf( "%d\t%s\t%d\t\t%x\t\t%s\n", i, desc, c, c, b );
i++;
if( (i % rows) == 0 ) {
printf("Press Enter to continue, Q+Enter to quit.");
if( getchar()=='q' ) return 0;
}
}
fclose(fh);
}
} // Konec zpracovavani souboru
return 0;
}
Fórum › C / C++
Prosím,nutně potřebuji pomoct v Zalu
no nevim, ale
printf( "%s\t%s\t%s\t%s\t%s\n", "adresa","znak","ascii (d)","ascii (h)","ascii (b)" );
proč tam jsou ty uvozovky?
printf( "%s\t%s\t%s\t%s\t%s\n", adresa,znak,ascii (d),ascii (h),ascii (b) );
Nejsu ted v linuxu, takze to nemuzu odskouset, ale zkus to bez tek uvozhovek ;)
opravdu byla chyba v tom radku. Doufam ze tedka uz ten program dela to co ma:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void itob( int i, char *s )
{
strcpy( s, "00000000" );
s = s + 8;
i = i & 0xff;
do {
*--s = (i&1?'1':'0');
i >>= 1;
} while(i);
}
int main(int argc, char ** argv, char ** envv)
{
int i = 0, rows = 20;
char *FileName = 0;
int ChangePos = -1;
int ChangeVal = -1;
/*
while( envv[i][0] != '\0' ) {
printf(">>> %s\n", envv[i] );
i++;
}
printf( "Pocet radku: %d\n", rows );
*/
// Nacteni parametru z prikazove radky
for( i=0; i<argc; i++) {
if( argv[i][0] == '-' ) {
// Jedna se o volbu
switch (argv[i][1]) {
case 'h':
printf("Pouziti:\n");
printf("\tfmon File_Name ... zobrazi obsah souboru File_Name po znacich.\n");
printf("\tfmon -c Change_Pos Change_Val ... zmeni znak na pozici Change_Val\n");
printf("\t na hodnotu Change_Val (dekadicky)\n");
printf("\n");
return 0;
case 'c':
ChangePos = atoi( argv[++i] );
ChangeVal = atoi( argv[++i] );
break;
} // switch druh volby
} // if volba
else
{
// Jedna se o jmeno souboru
FileName = argv[i];
}
} // for kazdy parametr radky
// Kontrola nactenych parametru
if( ! FileName ) {
printf( "Chybi jmeno souboru.\n" );
return -1;
}
if( (ChangePos>=0) && (ChangeVal<0) ) {
printf( "Chybi nova hodnota znaku pro zmenu v souboru.\n" );
return -3;
}
// Mame vse, zaciname :-)
printf( "Soubor: %s\n", FileName );
if( ChangePos>=0 ) {
// Budem jen menit znak v souboru
FILE * fh = fopen( FileName, "r+b" );
if( fh != NULL ) {
if( fseek(fh, ChangePos, SEEK_SET)==0 ) {
printf("Menim znak na pozici %d na hodnotu %d.\n",ChangePos,ChangeVal);
fputc(ChangeVal,fh);
} else {
printf("Nemuzu prejit na pozici %d.\n",ChangePos);
}
fclose(fh);
}
} else {
// Budem zobrazovat cely soubor
FILE * fh = fopen( FileName, "rb" );
if( fh != NULL ) {
int i = 0;
//unsigned char c;
char desc[10], b[9];
int c;
printf( "%s\t%s\t%s\t%s\t%s\n", "adresa","znak","ascii (d)","ascii (h)","ascii (b)" );
while((c=getc(fh)) != EOF) {
desc[0] = c;
desc[1] = '\0';
switch( c ) {
case 0: strcpy( desc, "NULL"); break;
case 7: strcpy( desc, "BELL"); break;
case 8: strcpy( desc, "BS" ); break;
case 9: strcpy( desc, "TAB" ); break;
case 10: strcpy( desc, "LF" ); break;
case 12: strcpy( desc, "FF" ); break;
case 13: strcpy( desc, "CR" ); break;
case 27: strcpy( desc, "ESC" ); break;
}
itob( c, b );
printf( "%d\t%s\t%d\t\t%x\t\t%s\n", i, desc, c, c, b );
i++;
if( (i % rows) == 0 ) {
printf("Press Enter to continue, Q+Enter to quit.");
if( getchar()=='q' ) return 0;
}
}
fclose(fh);
}
} // Konec zpracovavani souboru
return 0;
}
Pouzil jsem ten prikaz cos mel pod tim v komentarich a trochu ho upravil. A pote jsem ještě změnil c na int misto unsigned char. Vyzkousej, a napis., jestli to dela to co ma ;)
tak si tak říkám, jaký to má smysl?......
Jak se liší Windows a Tamagoči? Windows chcípnou, i když se o ně staráte.
Viete ako spoznáte závislosť na internete? Keď narazíte autom do zvodidiel, a prvé čo hľadáte je back.
Myslím žes to moc dobře pochopil...... ;)
Jaký to má smysl dělat něco o co nemám zájem..... (školu a úkoly si nechat psát) Z toho příspěvku předpokládám že to je student VŠ a tudíž se rozhodoval dobrovolně. To mi připadá jako chtít zhubnout, koupit si rotoped a nechat za sebe šlapat někoho jiného.... Tímto se do nikoho nechcu navážet to je pouze můj osobní názor.
Jak se liší Windows a Tamagoči? Windows chcípnou, i když se o ně staráte.
Viete ako spoznáte závislosť na internete? Keď narazíte autom do zvodidiel, a prvé čo hľadáte je back.
Vyhodia zo školy ? :D tak to je zaujimave že pišeš na fórum úlohu o desiatej v noci a cakas odpoved typu opravenia zdrojoveho kodu. Myslim že keď ťa nevyhodili teraz tak čoskoro to pride :D
sry neber to osobne.
Z takychto "studentov VS" nikdy nebudu nejaky programatori. Chlapci, ak programovaniu nerozumiete, tak chodte na nieco ine co vas BAVI. Pri rieseni realnych uloh vam taketo žobráčenie nepomože(uz so to hadam niekde spominal) !!! Tam vas nevyhodia zo školy, ale z práce. Na programovanie treba mat bunky... To ako ja by som sa teraz rozhodol byt ucitelom slovesnkeho jazyka(to by dopadlo :D ) .
Mozno nestuduje za programatora.Su fakulty, specializacie na VS ktore vobec s programovnaim nemaju nic spolocne ale je tam nejaky takyto predmet jeden ci dve semestre.To je tak ako napriklad na fakulte informatiky maju aj ekonomiku.
Neřešte to zase :) Na Builderu je skoro z každého druhého threadu flame o tom, jak jsou studenti VŠ nanic :) Prostě buď heplněte nebo na to kašlete, nemá smysl moralizovat, když si svou "lemplovitost" nakonec (samozřejmě, někdy tomu tak není) tazatel uvědomí sám.
To midin: ja jednoducho musim povedat, to co si myslim. mozno si tak nejakych ludi znenavidim, ale ked nemas nepriatelov, nemas ani priatelov :). a to je pravda(sa mi to viackrat overilo aj v reale).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
NUTNĚ POTŘEBUJI KOUPIT KNIHU — založil xp
Potřebuji pomoct s úkolem — založil Kuba
Potřebuji pomoct s výpisem z MySQL — založil Hcportos
Potřebuji pomoc ( prosím) [WIN32 API] — založil Zuben
Prosím zaspamujte mi stránky - potřebuji data k testování — založil Matěj Andrle
Moderátoři diskuze