Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 3.288 pregleda

Najnovija ↓

Molio bih pomoć ! ! ! 01.08.2005. u 15:11 · pre 258 meseci #1
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++]);
}
Potpis
Poslije spavanja treba odmorit ! ! !
Re: Molio bih pomoć ! ! ! 01.08.2005. u 15:29 · pre 258 meseci #2
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...
Potpis
"The problem with the world is that everyone is a few drinks behind."
-Humphrey Bogart
Re: Molio bih pomoć ! ! ! 01.08.2005. u 21:17 · pre 258 meseci
izmenjeno 1 put, poslednji put leka 01.08.2005. u 21:19
  1. leka01.08.2005. u 21:19zapis iz teksta poruke
#3
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
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme