Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Molio bih pomoć ! ! !

[es] :: C/C++ programiranje :: Molio bih pomoć ! ! !

[ Pregleda: 2468 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zokio
Balkan

Član broj: 27826
Poruke: 43
*.cmu.carnet.hr.

Sajt: student.oss.unist.hr/~zs9..


Profil

icon Molio bih pomoć ! ! !01.08.2005. u 14:11 - pre 227 meseci
Pozdrav svima ! ! !
Muči me sljedeći zadatak ! ! !


Napisati program koji će učitavati liniju po liniju, te svaku liniju spremiti u polje pokazivača na char tip podataka. Svaku liniju treba smjestiti u sljedeći član polja, te za svaku liniju alocirati točno određeni memorijski prostor


Naime napisao sam nekakav code ali mi compiler nejavlja grešku nego windows (send, don't send), nemogu naći grešku jel mi baš nije jasno korištenje polja pointera i uvrštavanje stringova u njih, pa bi bilo dobro ako tko ima kakav dobar link za literaturu o tome;

UNAPRIJED HVALA! ! !

evo moga pokušaja ! ! !

Code:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()

{
int i,j,brc=0;
char *str[10];
char *buffer;

if((buffer=malloc(80))==NULL){
puts("Neuspjesno alociranje memorije");
exit(0);}
else
puts("Uspjesno alociranje memorije");
for(j=0;j<3;){
puts("\n\nUtipkajte niz znakova i za kraj pritisnite Enter\n");
gets(buffer);
strcpy(str[j++],buffer);
free(buffer);
brc++;
}
for(i=0;i<brc;)
printf("%s",str[i++]);
}

Poslije spavanja treba odmorit ! ! !
 
Odgovor na temu

rumpl

Član broj: 54959
Poruke: 156
*.net81-65-34.noos.fr.



Profil

icon Re: Molio bih pomoć ! ! !01.08.2005. u 14:29 - pre 227 meseci
Pazi, lepo si poceo, samo sto str treba da bude str**, mallocuj buffer na 1024, na primer, moze i vise, i za svaku liniju -> read(0, buffer, strlen(buffer));

U trenutku kada imas tvoju liniju u buffer, za str** mozes da alociras tacno onoliko memorije koliko ti treba... I na kraju free(buffer), i to sve stavis u petlju....

Nadam se da sam bio barem malo jasan...

"The problem with the world is that everyone is a few drinks behind."
-Humphrey Bogart
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Molio bih pomoć ! ! !01.08.2005. u 20:17 - pre 227 meseci
Zokio, problem je bio sto si free(buffer) stavio na pogresno mesto. U prvoj iteraciji se memorija oslobadja, tako da program u drugoj iteraciji puca jer se poziva free(buffer) (nesto sto ne postoji, jer je u prethodnoj iteraciji ta memorija oslobodjena).
Evo programa koji radi, ali nije savrsen... :)

Code:

/*********************************************************\
file:        zokio01.cpp
description: Zokio problem No1
compile:     g++ zokio01.cpp -o zokio01
run:         ./zokio01
author:      zokio
corrections: Dejan Lekic, http://dejan.lekic.org
\*********************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main (int argc, char **argv)
{
  int i, j, brc = 0;
  char *str[10];
  char *buffer;

  if ((buffer = (char*)malloc(1024)) == NULL) {
    puts ("Neuspjesno alociranje memorije");
    exit (0);
  } else {
    puts ("Uspjesno alociranje memorije");
  }
  for (j = 0; j < 3; j++) {
    puts ("\n\nUtipkajte niz znakova i za kraj pritisnite Enter\n");
    // pod pretpostavkom (losom) da je buffer dovoljno velik koristicemo gets()
    // koji treba izbegavati uvek.
    gets (buffer);
    // Alociraj dovoljno memorije na heap-u da se u to parce moze smestiti
    // novouneseni string
    str[j] = (char*)malloc(strlen(buffer));
    // Iskopiraj bajtove iz bafera "buffer" u novokreirano memorijsko polje u heap-u
    strcpy (str[j], buffer);  // U principu je sigurnije koristiti strncpy() ...
    brc++;
  }
  // buffer nam vise ne treba
  free (buffer);
  for (i = 0; i < brc;)
    printf ("%s", str[i++]);
  // ovde bi trebalo eventualno "pobrisati" sve djubre iz memorije...
} // main() funkcija

Evo i primera rada:

dejan@gnu ~/prj/cxx/es
$ g++ -g zokio01.cpp -o zokio01 && ./zokio01
/tmp/ccyP4ghf.o(.text+0x8d): I funktionen "main":
/home/dejan/prj/cxx/es/zokio01.cpp:31: warning: the `gets' function is dangerous and should not be used.
Uspjesno alociranje memorije


Utipkajte niz znakova i za kraj pritisnite Enter

ES rulz


Utipkajte niz znakova i za kraj pritisnite Enter

Gojko rulz


Utipkajte niz znakova i za kraj pritisnite Enter


ES rulzGojko rulz


[Ovu poruku je menjao leka dana 01.08.2005. u 21:19 GMT+1]
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: C/C++ programiranje :: Molio bih pomoć ! ! !

[ Pregleda: 2468 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.