du meinst, du willst 10 zurückkriegen?
int main()
{
char foo[10][20];
printf("size of whole array: %d\n", sizeof(foo)); // -> 200
printf("size of second dimension: %d\n", sizeof(foo[0])); // -> 20
printf("size of first dimension: %d\n", sizeof(foo)/sizeof(foo[0])); // -> 10
return 0;
}
beschriebene länge? also wieviele der strings beschrieben sind?
geht meines wissens nur mit schleife:
int i, c = 0;
for (i = 0; i < sizeof(foo)/sizeof(foo[0]); ++i) c += (foo[i][0] != '\0');
prüft, ob bei einem string die terminierende null gleich am anfang ist, wenn nicht wird c inkrementiert.
Hallo,
falls ich das richtig sehe, kann man 'c' dennoch weglassen:
unsigned int ziffern(unsigned int b,unsigned int a) {
if(a/b) {
return ziffern(b,a/b)+1;
printf("%d",a%b);
}
return 0;
}
mfg
v R
wenn du die funktion aufrufst, musst du dort auch den speicher wieder deleten.
ANSI C wäre aber malloc() und delete()
also z.b.
char *foo = Buffer(); delete[] foo;
weil Buffer() selbst nichts wieder freigibt.
Tag,
beim ersten Mal, wartet er wahrscheinlich wirklich auf ankommende Daten. Beim
jeweils naechsten Schleifendurchlauf sind die Daten allerdings bereits vorhanden,
daher muss er nicht mehr warten.
mfg
v R
Hallo,
die Klammern um '*kopf' kannst du weglassen.
Aufrufen tust du das so:
listen_typ* lt;
insert(<, wert);
Also genauso, wie du es dir bereits gedacht hast.
mfg
v R
[cpp]#include <stdio.h>
#include <conio.h>
double fakultaet(int wert1); //Prototyp
//Beginn Hauptprogramm
main()
{
int wert1;
double ergebniss;
printf("Bitte geben Sie eine Zahl ein fuer welche Sie\nden Fakultaetswert errechnen moechten:");
scanf("%i",&wert1);
//Funktionsaufruf!
fakultaet(wert1);
printf("%lf",fakultaet(wert1));
getch();
}
//Ende des Hauptprogramms
//Beginn der Funktionserläuterung! Variable wert1 ist jetzt nur noch eine Kopie des Wertes aus main.
double fakultaet(int wert1)
{
double erg=1;
for(int i=1;i<=wert1;i++)
{
erg=erg*i;
}
return erg;
}[cpp]
www.duisburgtreff.de
Konfusius schrieb:
arrays muß man in C++ nicht ausnullen. in C++ macht das der compiler automatisch. in C jedoch ist der wert von variablen nach der deklaration undefiniert. kurz: in C muß mans ausnullen, in C++ nicht.
AFAIK verhalten sich C und C++ in diesem Punkt gleich. Grob gesagt, Arrays mit automatischer Lebensdauer (zB lokal) werden nicht initialisiert, Arrays mit statischer Lebensdauer (zB global) werden mit 0 initialisiert.
du kannst einfach den alten zählerstand vom neuen subtrahieren als wenn es keinen überlauf gäbe! klappt allerdings nur, wenn du unsigned int oder unsigned long verwendest! bei short und char klappts nicht weil zahlen kürzer als int vom compiler beim rechnen nach int konvertiert werden.
die bibliotheksfunktionen liegen dem compiler nur kompiliert bei in form von .o bzw .lib dateien. die könntest du dir höchstens mit nem dissassembler anschauen
du kannst dir aber die deklaration in der datei stdio.h angucken.
ansonsten gilt was DanielE geschrieben hat: die quelltexte würden dich garantiert in den wahnsinn treiben
also Daniel E. hat schon recht.
es gib sehr alte C-biliotheken in denen strdup() die kopie mit alloca() erstellt oder sogar in einem globalen array. bei der methode mit dem globalen array kann man nur von einem string gleichzeitig eine kopie erstellen. bei der alloca() methode gehen beliebig viele, allerdings sind die nach rückkehr aus der funktion, die strdup() aufgerufen hat, alle wieder futsch.
diese alten methoden sind halt weniger flexibel. aber dafür sehr effizient
PS: alloca() ist natürlich KEIN quatsch! mit alloca() kannst du die größe auch zur laufzeit berechnen, wie es für strdup() nötig ist. da muß der speicher ja so groß sein wie der string. mit array-deklaration geht die größenberechnung zur laufzeit nur bei SEHR wenigen compilern (etwa GNU-C).
Dann teil das Problem doch auf:
int lotto_helper(int anz, int t[], int g[], int start_idx, int zaehler);
int lotto(int anz, int t[], int g[]) {
return lotto_helper(anz, t, g, 0, 0);
}