Toon posts:

[c]Grootte van een array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een array tekst.

[code]
while ((c=getchar()) != 1) // asci teken voor crl alt
{
tekst[teller]=c;
teller++;
}
drukaf(tekst);

Maar ik weet nooit hoe groot ik deze array moet doen.
Is daar een oplossing voor?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je zou het kunnen door door automatisch bv 1024 bytes als buffer (dus array van 1024 bytes lang) te gaan gebruiken, maar dan kan je niet meer dan 1024 bytes invoeren (of welk getal je daar ook voor gebruikt). Je zou ook een gelinkte lijst kunnen gebruiken (is alleen wel traag) en dan als je klaar bent die converteren naar een array van chars ofzo (als je nog iets met die chars wilt doen anders dan afdrukken).

Verwijderd

Topicstarter
Op dinsdag 09 oktober 2001 17:09 schreef Alarmnummer het volgende:
Je zou het kunnen door door automatisch bv 1024 bytes als buffer (dus array van 1024 bytes lang) te gaan gebruiken, maar dan kan je niet meer dan 1024 bytes invoeren (of welk getal je daar ook voor gebruikt). Je zou ook een gelinkte lijst kunnen gebruiken (is alleen wel traag) en dan als je klaar bent die converteren naar een array van chars ofzo (als je nog iets met die chars wilt doen anders dan afdrukken).
Ik dacht eerst hetzelfde als jouw dus een array te maken van 1000.
Maar al wil ik die array dan afdrukken
geeft de printer alleen maar puntjes.
Kan er in c niet iets als redim ofzo?

Verwijderd

Helaas moet in C de grootte van je array bekend zijn als je je prog compileert. Deze kan je dan niet meer aanpassen.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
malloc

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Op dinsdag 09 oktober 2001 17:24 schreef farlane het volgende:
malloc
Wat bedoel je daarmee?

Verwijderd

Juist, werk gewoon met een buffer van een vaste lengte, en controleer of je niet over de bounds van die buffer schrijft. Het is ook handig je string af te sluiten met een null-char, dan weet je tenminste waar hij ophoudt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define BUFSIZE 1024

int teller,
    ch,
    data= 1;

do {
  for(teller= 0; teller < BUFSIZE - 1; ++teller) {
    ch= getchar();
    if(ch == 0 || ch == 1) {
    data= 0;
    break;
    }
    tekst[teller]= ch;
  }
  tekst[teller]= '\0';
  drukaf(tekst);
} while(data);

Verwijderd

Topicstarter
Op dinsdag 09 oktober 2001 17:27 schreef mietje het volgende:
Juist, werk gewoon met een buffer van een vaste lengte, en controleer of je niet over de bounds van die buffer schrijft. Het is ook handig je string af te sluiten met een null-char, dan weet je tenminste waar hij ophoudt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define BUFSIZE 1024

int teller,
    ch,
    data= 1;

do {
  for(teller= 0; teller < BUFSIZE - 1; ++teller) {
    ch= getchar();
    if(ch == 0 || ch == 1) {
    data= 0;
    break;
    }
    tekst[teller]= ch;
  }
  tekst[teller]= '\0';
  drukaf(tekst);
} while(data);
Bedankt.
Weten jullie eigenlijk hoe groot een array mag zijn in de real mode?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

[weetNietZekerMeerWantProgtAlleenNogMaarInJavaMode]
geloof dat je in real mode toch in 16 bits zit? Dus 65k-hetgene_wat_al_aan_data_gebruikt_is = max_buffer_size
tenzij je een pointer in een ander segment neer gaat zetten is dat geloof ik maximum.
[/weetNietZekerMeerWantProgtAlleenNogMaarInJavaMode]

Verwijderd

Als je in real mode werkt is de groote van elk segment maximaal 64KB. Je array is dus maximaal 65536 / sizeof(element) elementen groot. Het kan zijn dat sommige compilers nog een paar bytes van die 65536 afsnoepen.

Als je daarintegen een tiny-mode programma schrijft (een .com ipv. een .exe), is de totale grootte van het programma 64KB, en klopt de formule van Alarmnummer.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik bedoel de data die je al in andere structuren hebt zitten en niet in code of stack segment. Dus totaal_data_segment=65k

totaal_buffer = totaal_data_segment - totaal_andere_structuren_in_data_segment

En zonder een flame war te ontketenen, waarom vinden jullie het fijn om steeds zo gehandicapt te werken? Ik heb een paar jaar in c geprogged (ook pascal,modula,asm) en nu alleen nog maar in java. En ik zou niet meer terug willen. Wat is jullie motivatie om in c en asm te blijven proggen? (en niet aankomen zetten dat java een kinderachtige taal is, want dat was mijn mening in het begin ook, en die mening was 100% ongegrond.)

En zo nu en dan een beetje bitn*uken is heel leuk om te doen :) , maar waarom steeds in de ouderwetse omgevingen zitten? Waarom niet eens gebruiken wat allemaal mogelijk is?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:09
Op dinsdag 09 oktober 2001 17:24 schreef farlane het volgende:
malloc
Met malloc kun je in C idd dynamisch geheugen gaan alloceren. Dit moet je dan ook weer vrijgeven. Hoe het precies gaat kan ik je niet zo vanbuiten zeggen. In C++ kun je ook dynamisch geheugen gaan alloceren maar dan met de new operator.
Zoek eens in uw online help naar de malloc functie sou ik zo zeggen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Op dinsdag 09 oktober 2001 19:22 schreef whoami het volgende:

[..]

Met malloc kun je in C idd dynamisch geheugen gaan alloceren. Dit moet je dan ook weer vrijgeven. Hoe het precies gaat kan ik je niet zo vanbuiten zeggen. In C++ kun je ook dynamisch geheugen gaan alloceren maar dan met de new operator.
Zoek eens in uw online help naar de malloc functie sou ik zo zeggen.
Onder welke header file zit dat?

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
Onder welke header file zit dat?
stdlib.h of malloc.h of memory.h...

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

in 16 bit real modes heb je in principe gewoon de volledige vrije ruimte onder 640k tot je beschikking.

programma's onder het Tiny model kunnen idd maar max 64k zijn, maar als je je programma compileert met het large of huge model, dan kunnen je arrays dus gewoon voorbij de 64k limiet

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Maar ik weet nooit hoe groot ik deze array moet doen.
maw...je redt het niet zonder malloc, omdat je dynamisch moet gaan bepalen hoe groot dat array moet worden.

Nog nooit van malloc() gehoord? Sla er eens een c tutorial op na zou ik zeggen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1