Avatar billede danielhep Nybegynder
22. juli 2004 - 21:12 Der er 7 kommentarer og
1 løsning

dynamisk buffer til linux

hej

hvordan laver man en buffer således under linux.

buffer[dynamisk][dynamisk]

jeg skal bruge en variabel som er dynamisk af størelse, så man er fri for at bruge malloc, og realloc.
Jeg skulle da mene at der er en løsning....

mvh
daniel
Avatar billede arne_v Ekspert
22. juli 2004 - 21:20 #1
Det er faktisk ikke nemt !

Normalt emulerer man 2D i et 1D array eller bruger array af pointere til array.

Jeg lavede for lang tid siden et lille eksempel som illusterer begge + et tredie
hack.

#include <iostream>

using namespace std;

void init1(int *a,int n,int m)
{
  for(int i=0; i<n; i++) for(int j=0; j<m; j++) a[i*m+j]=1;
  return;
}

void show1(int *a,int n,int m)
{
  for(int i=0; i<n; i++) {
      for(int j=0; j<m; j++) cout << " " << a[i*m+j];
      cout << endl;
  }
  return;
}

void init2(int **b,int n,int m)
{
  for(int i=0; i<n; i++) for(int j=0; j<m; j++) b[i][j]=2;
  return;
}

void show2(int **b,int n,int m)
{
  for(int i=0; i<n; i++) {
      for(int j=0; j<m; j++) cout << " " << b[i][j];
      cout << endl;
  }
  return;
}

typedef int twodim[][3]; // <-------- fixed second dimension

void init3(twodim c,int n,int m)
{
  for(int i=0; i<n; i++) for(int j=0; j<m; j++) c[i][j]=3;
  return;
}

void show3(twodim c,int n,int m)
{
  for(int i=0; i<n; i++) {
      for(int j=0; j<m; j++) cout << " " << c[i][j];
      cout << endl;
  }
  return;
}

int main()
{
  int n = 2;
  int m = 3;
  int *a = new int[n*m];
  init1(a,n,m);
  show1(a,n,m);
  int **b = new (int *)[n];
  for(int i=0; i<n; i++) b[i]=new int[m];
  init2(b,n,m);
  show2(b,n,m);
  twodim *c = new twodim[2];
  init3(*c,n,m);
  show3(*c,n,m);
}
Avatar billede danielhep Nybegynder
22. juli 2004 - 21:29 #2
det er fordi jeg er ved at lave en text editor...når man læser en fil ind, har den en størelse..den kan man ikke forudse...så skal man have en dynamisk variabel..men problemet er så når man skriver noget nyt fra keyboadet...så skal bufferen udvides...
Avatar billede arne_v Ekspert
22. juli 2004 - 21:39 #3
Hvad med STL vector af STL string ?

en linie = en STL string

en fil = en STL vector
Avatar billede laffe Nybegynder
22. juli 2004 - 23:04 #4
Du kunne lave en linket liste af characterer, eller ord. Den kan vokse alt det du vil.
Avatar billede danielhep Nybegynder
24. juli 2004 - 14:48 #5
ok...men hvis jeg skulle vælge imellem en buffer som skulle:

1) reallokere mere hukommelse for hver gang at brugeren taster nye bogstver/ord/tal ind ?

2) skulle man prøve sig med den dynamiske buffer ?

3) antage et antal karektere ad gangen f.eks buffer[1000], og for hver gang limit er nået, så 1000 nye ?
(buffer[1000]->buffer[2000]->buffer[3000])
Avatar billede arne_v Ekspert
24. juli 2004 - 15:19 #6
#1 er ikke god

#2 eller #3
Avatar billede danielhep Nybegynder
24. juli 2004 - 17:33 #7
arne_v dig et svar
Avatar billede arne_v Ekspert
24. juli 2004 - 17:35 #8
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester