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
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);
}
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...
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])