Prosím,nutně potřebuji pomoct v Zalu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Prosím,nutně potřebuji pomoct v Zalu – C / C++ – Fórum – Programujte.comProsím,nutně potřebuji pomoct v Zalu – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Neros
~ Anonymní uživatel
1 příspěvek
15. 2. 2007   #1
-
0
-

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;
}

Nahlásit jako SPAM
IP: ...–
Reklama
Reklama
Alan0
Věrný člen
15. 2. 2007   #2
-
0
-

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 ;)

Nahlásit jako SPAM
IP: ...–
PSP user|Web developer|C4D user||Maya Lamer|Photoshop User|Guitar player
Systém
~ Anonymní uživatel
61 příspěvků
15. 2. 2007   #3
-
0
-

To Al:nemohl by si jít prosím do Linuxu a zkusit to.Musím to zítra mít hotový,jinak mi vyhodí ze školy a ten kluk,co to dělal,se mi vůbec neozývá.Moc byc si mi opravdu pomoh.Byl bych ti moc vděčný.

Nahlásit jako SPAM
IP: ...–
Systém
~ Anonymní uživatel
61 příspěvků
15. 2. 2007   #4
-
0
-

To Al:chyva je právě v tomle řádku
while( fread(c,1,1,(fh)) > 0 )

Nahlásit jako SPAM
IP: ...–
Alan0
Věrný člen
15. 2. 2007   #5
-
0
-

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 ;)

Nahlásit jako SPAM
IP: ...–
PSP user|Web developer|C4D user||Maya Lamer|Photoshop User|Guitar player
Systém
~ Anonymní uživatel
61 příspěvků
15. 2. 2007   #6
-
0
-

To Al:Perfektní.Ani nevíš,jak sem ti moc zavázán.Zachránil si mi od pohromy.Děkuju moc a doufám.Kéž by bylo takových lidí více jako si ty.Ještě jednou mooooooc děkuju:))))))))

Nahlásit jako SPAM
IP: ...–
Alan0
Věrný člen
15. 2. 2007   #7
-
0
-

jj, a napis koliks dostals bodu;)

Nahlásit jako SPAM
IP: ...–
PSP user|Web developer|C4D user||Maya Lamer|Photoshop User|Guitar player
Tax0
Super člen
16. 2. 2007   #8
-
0
-

tak si tak říkám, jaký to má smysl?......

Nahlásit jako SPAM
IP: ...–
Carpe diem. (Horatius)
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.Vsetci mi hovoria, ze meno kocura sa ako heslo pre roota nehodi. :-( Ale ked ja som si tak privykol na mojho qzb!7kw_2et !
Alan0
Věrný člen
16. 2. 2007   #9
-
0
-

Tax píše:#
# tak si tak říkám, jaký to má smysl?......

Tak si tak říkám, žes neřekls co :D

Nahlásit jako SPAM
IP: ...–
PSP user|Web developer|C4D user||Maya Lamer|Photoshop User|Guitar player
Tax0
Super člen
16. 2. 2007   #10
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Carpe diem. (Horatius)
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.Vsetci mi hovoria, ze meno kocura sa ako heslo pre roota nehodi. :-( Ale ked ja som si tak privykol na mojho qzb!7kw_2et !
Peter D.0
Expert
16. 2. 2007   #11
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Radoslav Pala0
Super člen
16. 2. 2007   #12
-
0
-

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 ) .

Nahlásit jako SPAM
IP: ...–
Rady Pala - www.radypala.sk ,tvorca MojaTrieda - http://mojatrieda.radypala.sk, elan.radypala.sk
sn3d0
Věrný člen
18. 2. 2007   #13
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
shutdown -h now
Pedro0
Stálý člen
19. 2. 2007   #14
-
0
-

To sn3d:
s tou ekonomikou ma nestras ... o to fakt zaujem nemam ...

Nahlásit jako SPAM
IP: ...–
Vsetci ste blazni, to len ja som lietadlo
Miroslav Kajan0
Věrný člen
23. 2. 2007   #15
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Zápisky z dění na FB (momentálně ve vývoji): http://fbpd.ic.cz/
Radoslav Pala0
Super člen
23. 2. 2007   #16
-
0
-

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).

Nahlásit jako SPAM
IP: ...–
Rady Pala - www.radypala.sk ,tvorca MojaTrieda - http://mojatrieda.radypala.sk, elan.radypala.sk
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 83 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý