View Full Version : [C] Fermi tutti, è arrivato un ignorante
Come noterete dalla pochezza del codice stò cercando di imparare C. Al momento C non collabora granchè.
IO vorrei determinare la dimensione di un array con una funzione, LUI no. Pensavo di poterlo fare dividendo la dimensione in memoria dell'array per la dimensione del tipo (sizeof(array_di_char)/sizeof(char)), passando come argomento array di caratteri.
La funzione invece mi restituisce un valore diverso (sempre 4, che credo abbia a che fare con la dimensione dell'argomento-tipo e non dell'argomento che gli passo io).
Qualcuno abbia pietà e mi dica perchè.
#include <stdio.h>
void howMuch(char[]);
char array[]="Hello world";
int main() {
howMuch(array);
int length=sizeof(array)/sizeof(char);
printf("\nChar amount (main): %d",length);
return 0;
}
void howMuch(char buffer[]) {
int length=sizeof(buffer)/sizeof(char);
printf("\nChar amount (function): %d",length);
}
output:
Char amount (function): 4
Char amount (main): 12
Grazie!.
Ciao.
Originariamente inviato da PGI
Come noterete dalla pochezza del codice stò cercando di imparare C. Al momento C non collabora granchè.
IO vorrei determinare la dimensione di un array con una funzione, LUI no. Pensavo di poterlo fare dividendo la dimensione in memoria dell'array per la dimensione del tipo (sizeof(array_di_char)/sizeof(char)), passando come argomento array di caratteri.
La funzione invece mi restituisce un valore diverso (sempre 4, che credo abbia a che fare con la dimensione dell'argomento-tipo e non dell'argomento che gli passo io).
Qualcuno abbia pietà e mi dica perchè.
#include <stdio.h>
void howMuch(char[]);
char array[]="Hello world";
int main() {
howMuch(array);
int length=sizeof(array)/sizeof(char);
printf("\nChar amount (main): %d",length);
return 0;
}
void howMuch(char buffer[]) {
int length=sizeof(buffer)/sizeof(char);
printf("\nChar amount (function): %d",length);
}
output:
Char amount (function): 4
Char amount (main): 12
Grazie!.
Ciao.
scrivere char[] è come dichiarare char* quindi si parla di un puntatore. i puntatori sono numeri interi di 32bit. 32bit / 8bit (dimensione di un char) = 4.
ciao ;)
Sintetico ma risolutivo! :D
Ti ringrazio, mi hai dato lo spunto per trovare sul libro dove parla (2 righe) dell'errore che ho fatto...beata ignoranza, dove arriveremo se si pretende di passare ad una funzione un array INTERO :eek:, ma che siamo matti, lo vogliamo sovraccaricare di lavoro questo C!!!
Ciao.
ottobrerosso
03-08-2003, 09:26
C'è anche una funzione nella libreria string.h che ti può essere utile,
prova questo codice :
#include <stdio.h>
#include <string.h>
int main()
{
char arr_1[]="Hello World";
printf("dimensione = %d",strlen(arr_1));
return 0;
}
ti darà il valore corretto (11)
ciao.
Grazie!
In effetti fa quello che volevo fare io "a mano". Un giorno capirò anche come! :)
Ciao.
Strutture! Perdonatemi ancora se rompo con cose per voi banali ma sono alla ricerca di un libro/guida decente su C e ancora non l'ho trovato (al momento mi arrangio con programmare in C della Apogeo e TIC++). La domanda è:
Per inizializzare una struttura è necessario usare dei valori costanti? Se sì che alternative ci sono per fare una cosa del genere:
struct point3f {
float x,y,z;
};
struct point3f p1={0.0,0.0,0.0};
struct point3f p2={1.0,0.0,0.0};
...e via seguitando fino a "p6"
struct point3f va[]={
p1,p2,p3,p4
};
...e via ancora...
Grazie e ciao.
Ho risolto passando a C++. Per chi fosse interessato, questa roba qua sotto funziona in C++ (ma l'analoga struttura C no)
XDraw::XDraw(BOOL k[]) {
keyList=k;
}
Point3f p0(0.0,0.0,0.0);
Point3f p1(1.0,0.0,0.0);
Point3f p2(1.0,1.0,0.0);
Point3f p[]={
p0,p1,p2
};
void XDraw::doDraw() {
int i=0;
glTranslatef(-1.5f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
for(i=0;i<3;i++) {
glVertex3f(p[i].x,p[i].y,p[i].z);
}
glEnd();
}
Ciao.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.