› Foros › Multiplataforma › Desarrollo
scanf("%s",&url);//Introducimos url y la guarda en el char url
char url[37];
char start[7]="start ";//start, para abrir el link
system(strcat(start,url));//y bueno, la union
#include <stdio.h>
#include <stdlib.h>
void end(){
printf("\nPulsa para salir");
}
int main(int argc, char *argv[])
{
printf("------------------------------------\n");
printf("| Loader MV by FroX |\n");
printf("------------------------------------\n\n");
printf("Escribe el final del link de MegaVideo\n");
char url[37];
scanf("%s",&url);
char urlorig[255]="start http://wwwstatic.megavideo.com/mv_player.swf?v= ";
system(strcat(urlorig,url));
end();
system("PAUSE>nul");
return 0;
}
GameZelda escribió:scanf("%s",&url);
Creo que debe ir sin el &.
kYp escribió:GameZelda escribió:scanf("%s",&url);
Creo que debe ir sin el &.
Eso esta bien, como segundo parametro necesita la direccion de la variable, aun asi ya lo tiene solucionado segun su EDIT.
kYp escribió:Voy a ser un poco "pedante".
Como parametro tiene que ir lo que tiene que ir, no es que con una forma vaya con & y dinamica sin &, el caso es que malloc ya te da un puntero a la memoria reservada no hace falta obtenerla con &.
En ese caso es lo mismo por que en vectores es lo mismo "&Vector[0]" que "Vector".
Bueno ya respondimos los dos a que no era causa del & como decias
nazareth escribió:Joder, cuanto me queda por aprender, PAlib y un poco de c, ahi voy xD
Esto es interesante, asique dos preguntas:
1º- que significa, por ejemplo, int valor[4][5];
2º- pregunta realmente tonta, alguna forma de hacer una GUI para c? como netbeans y javascript.
kbks escribió:1ª: int valor[4][5] es una declaración de un array bidimensional de 5x5 casillas
kYp escribió:...
kYp escribió:V+1*sizeof(int) = &V[1]
kYp escribió:(Aunque el compilador tira igual con V+1 en vez de multiplicar por el tamaño del tipo de dato por que ya lo comprueba el yo creo que para algo que nunca se hace, es mejor usaar sizeof por que queda mas claro xD)
#include <stdio.h>
int main(void)
{
int *x = NULL;
printf("%p %p\n", x, x + 1);
return 0;
}
kbks escribió:Que no te siente mal lo que te voy a decir, porque no es mi intención, pero antes de pensar en GUIs ni nada por el estilo aprende a programar en C, porque no es lógico pensar en esas cosas y no saber lo que es "int valor[4][5]". Es un consejo para que no te pierdas en llamas a APIs y al final en vez de programar solo sepas "leer tutos", cosa muy usual en casos parecidos.
kbks escribió:Respecto a tus preguntas:
1ª: int valor[4][5] es una declaración de un array bidimensional de 5x5 casillas (conceptualmente se puede pensar en el como en una tabla o un "array de arrays"). Es decir, para acceder a un valor del array se hace como en un array normal pero con dos índices. Por ejemplo "valor[0][3]" hace referencia a la posición [0][3] de la tabla (no pienses cual es la columna y cual la fila porque da igual, como a ti te guste mas).
De la misma manera se pueden declarar arrays de 3, 4, 5 o 20 dimensiones: "int valor[5][6][67][23][3]" sería un array de 5 dimensiones y se accedería igual (y no, no intentes imaginartelo porque imaginarse una estructura de datos de 5 dimensiones es imposible )
2º: Depende de la plataforma existirán unas librerías u otras, eso si, no esperes tener un editor gráfico de interfaces drag&drop para C porque eso, que yo sepa, no lo implementa ningún entorno. Aquí tienes que hacer el código a pelo (que es lo mismo que hace netbeans, solo que netbeans en java te autogenera el código de las interfaces que tu diseñes). Para windows yo he realizado alguna cosa con la WinAPI, pero simplemente tener una ventana con 2 botones ya es bastante locura. Si te da igual usar C++ tienes mas opciones. Si lo que estas pensando es tener una librería así en NDS yo diría que no existe ni para uno ni para otro.
kbks escribió:2º: Depende de la plataforma existirán unas librerías u otras, eso si, no esperes tener un editor gráfico de interfaces drag&drop para C porque eso, que yo sepa, no lo implementa ningún entorno. Aquí tienes que hacer el código a pelo (que es lo mismo que hace netbeans, solo que netbeans en java te autogenera el código de las interfaces que tu diseñes). Para windows yo he realizado alguna cosa con la WinAPI, pero simplemente tener una ventana con 2 botones ya es bastante locura. Si te da igual usar C++ tienes mas opciones. Si lo que estas pensando es tener una librería así en NDS yo diría que no existe ni para uno ni para otro.
Game_Zelda escribió:No, no funciona así, si no que el valor que se incrementa al puntero depende del tipo, siempre se multiplica automaticamente y en cualquier caso por el tamaño, aunque tu ya lo hayas multiplicado antes. "(V+1) == &V[1]" y "(V+1*sizeof(int)) != &V[1]" para cualquier array.
nazareth escribió:1º- que significa, por ejemplo, int valor[4][5];
kYp escribió:nazareth escribió:1º- que significa, por ejemplo, int valor[4][5];
En C significa que tienes 5 array's de tamaño 4, seguidos uno detras de otro, C almacena por filas , asi el valor de valor[0][1] tiene al lado de valor[1][1] y este a su lado el de valor[2][1] etc... Guardar la info para recorrerla por filas puede suponer un gran incremento del rendimiento , si se mete por medio la gestion de memoria del SO.
kYp escribió:Game_Zelda escribió:No, no funciona así, si no que el valor que se incrementa al puntero depende del tipo, siempre se multiplica automaticamente y en cualquier caso por el tamaño, aunque tu ya lo hayas multiplicado antes. "(V+1) == &V[1]" y "(V+1*sizeof(int)) != &V[1]" para cualquier array.
Juraria que iba tambien con sizeof, pero bueno menuda decepcion pensaba que C te dejaba fuchicar a tan bajo nivel como en asm pero no :/.
#include <stdio.h>
int main(void)
{
int *x = NULL;
printf("%p %p\n", x, (int *)((char *)x + 1));
return 0;
}
kbks escribió:En realidad da bastante igual, ya que puedes pensar que las filas es el primer índice y que las columnas es el segundo o al revés, que va a funcionar igual y conceptual mente va a estar bien. No es mas que un acceso a un valor mediante dos índices.
GameZelda escribió:Se puede, lo unico que es un poco "feo"...
ANTONIOND escribió:kYp escribió:nazareth escribió:1º- que significa, por ejemplo, int valor[4][5];
En C significa que tienes 5 array's de tamaño 4, seguidos uno detras de otro, C almacena por filas , asi el valor de valor[0][1] tiene al lado de valor[1][1] y este a su lado el de valor[2][1] etc... Guardar la info para recorrerla por filas puede suponer un gran incremento del rendimiento , si se mete por medio la gestion de memoria del SO.
Es al revés, 4 arrays de 5 elementos cada uno. El [0][0] está al lado del [0][1], etc... Por ejemplo, si declaras algo como "int matriz[2][3] = { {1,2,3}, {4,5,6} };" estás dando el valor a las filas de la matriz.
kbks escribió:A lo que me refería es que si yo necesito muchas columnas y/o acceder a los datos por columna, si conceptualmente pienso en "array[columna][fila]" sería mas eficiente que si pienso en como se almacena en realidad en memoria.
No se si de esta manera se ganará rendimiento, pero cuando necesito arrays realmente grandes y es un proceso crítico suelo utilizar uno unidimensional delimitando el número de elementos por fila mediante un entero y una división. Lo suelo hacer precisamente por eso, por la caché, aunque la verdad es que nunca he comprobado si el rendimiento mejora realmente. ¿Alguien podría ilustrarme ya que estamos en el tema?
nazareth escribió:Bueno, por cuestiones de rendimiento segun antonio, int array[fila][columna], ahora, como se accede a ella? seria algo tipo:
Supongames que fila=1 y columna=2
array[1][2]= le damos valor o algo, no?
Se podria estableces un array[256][192] y asignar cada valor a un pixel? (referente pantalla de nds)
GameZelda escribió:kYp escribió:Voy a ser un poco "pedante".
Como parametro tiene que ir lo que tiene que ir, no es que con una forma vaya con & y dinamica sin &, el caso es que malloc ya te da un puntero a la memoria reservada no hace falta obtenerla con &.
En ese caso es lo mismo por que en vectores es lo mismo "&Vector[0]" que "Vector".
Bueno ya respondimos los dos a que no era causa del & como decias
Mi error viene de que no conocía que "&x" diese el mismo resultado que "x" para un array (nunca me había encontrado con un ningún caso de este tipo, y (creo que) no tiene ningún uso práctico).
El caso es raro, porque mientras &a, en el caso de un puntero (T *) devuelve un puntero a un puntero (T **), en el caso de un array (T[n]) devuelve un puntero (T *), pero el mismo array ya se puede utilizar como si fuera un puntero directamente. No se si me explico mucho
GameZelda escribió:El caso es raro, porque mientras &a, en el caso de un puntero (T *) devuelve un puntero a un puntero (T **), en el caso de un array (T[n]) devuelve un puntero (T *), pero el mismo array ya se puede utilizar como si fuera un puntero directamente. No se si me explico mucho
int b= 20;
int *a = &b;
zheo escribió:GameZelda escribió:kYp escribió:Voy a ser un poco "pedante".
Como parametro tiene que ir lo que tiene que ir, no es que con una forma vaya con & y dinamica sin &, el caso es que malloc ya te da un puntero a la memoria reservada no hace falta obtenerla con &.
En ese caso es lo mismo por que en vectores es lo mismo "&Vector[0]" que "Vector".
Bueno ya respondimos los dos a que no era causa del & como decias
Mi error viene de que no conocía que "&x" diese el mismo resultado que "x" para un array (nunca me había encontrado con un ningún caso de este tipo, y (creo que) no tiene ningún uso práctico).
El caso es raro, porque mientras &a, en el caso de un puntero (T *) devuelve un puntero a un puntero (T **), en el caso de un array (T[n]) devuelve un puntero (T *), pero el mismo array ya se puede utilizar como si fuera un puntero directamente. No se si me explico mucho
El nombre de un vector NO es un puntero. Es una conversión:
http://stackoverflow.com/users/10136?ta ... y#sort-top
La prueba la tienes en que si lo pasas como parámetro a una función que modifica el puntero fallará.
zheo escribió:Y por otro lado, no me parece que tengas entendido del todo lo que es un puntero cuando dices esto:GameZelda escribió:El caso es raro, porque mientras &a, en el caso de un puntero (T *) devuelve un puntero a un puntero (T **), en el caso de un array (T[n]) devuelve un puntero (T *), pero el mismo array ya se puede utilizar como si fuera un puntero directamente. No se si me explico mucho
De hecho el operador de "desreferencia" no lo pillas muy bien me temo.
El operador &, devuelve la posición de memoria donde está alojada una variable.
Un puntero es una dirección de memoria. Pero si almacenas un puntero en una variable entonces también tiene que guardarse en alguna parte: en otra posición en memoria.
Por tanto si tienesy haces &a, esto te devuelve la dirección de memoria donde está alojada la variable que contiene el puntero a. Y como una dirección de memoria es un puntero, lo que &a devuelve es un puntero, que apunta a otro puntero que apunta a la dirección de memoria donde está b.int b= 20;
int *a = &b;
int a = 123; // Tipo T
int *b = &a; // Tipo T *
int **c = &b; // Tipo T **
int d[123]; // Tipo T
int *e = d; // Tipo T *
int *f = &d; // Tipo T *, tambien
GameZelda escribió:Mi error viene de que no conocía que "&x" diese el mismo resultado que "x" para un array (nunca me había encontrado con un ningún caso de este tipo, y (creo que) no tiene ningún uso práctico).
El caso es raro, porque mientras &a, en el caso de un puntero (T *) devuelve un puntero a un puntero (T **), en el caso de un array (T[n]) devuelve un puntero (T *), pero el mismo array ya se puede utilizar como si fuera un puntero directamente. No se si me explico mucho
GameZelda escribió:No se si has entendido bien a lo que me referia con mi post. Algo como así:int a = 123; // Tipo T
int *b = &a; // Tipo T *
int **c = &b; // Tipo T **
int d[123]; // Tipo T
int *e = d; // Tipo T *
int *f = &d; // Tipo T *, tambien
Simplemente esto me sorprendió, que tanto "d" como "&d" se pudieran convertir a una variable de tipo "T *", si "d" es un vector de tipo T.
zheo escribió:No pretendo entrar en discusiones semánticas, pero a mi es lo que me dio a entender frases como estas:GameZelda escribió:Mi error viene de que no conocía que "&x" diese el mismo resultado que "x" para un array (nunca me había encontrado con un ningún caso de este tipo, y (creo que) no tiene ningún uso práctico).
El caso es raro, porque mientras &a, en el caso de un puntero (T *) devuelve un puntero a un puntero (T **), en el caso de un array (T[n]) devuelve un puntero (T *), pero el mismo array ya se puede utilizar como si fuera un puntero directamente. No se si me explico mucho
Sólo pretendía dejarlo claro, porque como pongo en el link, hay diferencias importantes (como hacer un sizeof)GameZelda escribió:No se si has entendido bien a lo que me referia con mi post. Algo como así:int a = 123; // Tipo T
int *b = &a; // Tipo T *
int **c = &b; // Tipo T **
int d[123]; // Tipo T
int *e = d; // Tipo T *
int *f = &d; // Tipo T *, tambien
Simplemente esto me sorprendió, que tanto "d" como "&d" se pudieran convertir a una variable de tipo "T *", si "d" es un vector de tipo T.
El error que tienes ahí es que en realidad d es un tipo T[]:
int d[123]; // Tipo T[]
Cuando haces
int *e = d
se hace una conversión automática a T* con la dirección de memoria del primer elemento del array...
Cuando usas el operador de referencia & (me equivoqué en mi post anterior, ya está corregido) pides la dirección de memoria del array, es decir, la dirección del primer elemento.
La utilidad es que así puedes usar aritmética de punteros en arrays estáticos.
int d[123]; // Tipo T
mientras &a, [...] en el caso de un array (T[n]) devuelve un puntero (T *)
int a[100]; // Tipo T[n]
int *b = &b; // Tipo T *
"&x" diese el mismo resultado que "x" para un array
#include <stdio.h>
#include <assert.h>
int main()
{
int a[10];
printf("%p\n", a); // Imprimir el puntero al primer elemento de un array (printf es una funcion "variadic", con lo que queda probado que siempre que se pasa un array a una función, se pasa como un puntero).
assert(a == &a); // Comparación de array con puntero
a == 123; // (Con GCC, ni idea con el de Microsoft): "warning: comparison between pointer and integer"
return 0;
}
nazareth escribió:Si exacto, eso lo tiene de defecto pero no se como hacer para usarlo.
Otra pregunta referente a los ¿buffer?:
Creo sBuffer bfr; bien, vale, lo uso, bien, vale, ahora, con .length puedo saber si tamaño (creo recordar) pero la pregunta es, hay forma de eso pasarlo a un archivo? es decir, guardar la info?
int main(char* argv[], int argc) {
// Tratar argv como si fuera una variable mas.
}
mi-programa.exe -a=file -d
zheo escribió:¡No puedes cambiar el orden de los argumentos que recibe main!
Los argumentos de main los recibe tu programa con las siguientes consideraciones.
Se considera un argumento cada palabra separada por un espacio al introducir el comando, incluyendo el propio comando, esto es:mi-programa.exe -a=file -d
Recibe tres parámetros:
mi-programa.exe
-a=file
-d
Tu programa recibirá esa información por los dos argumentos de la función main, el primero recibe el número de parámetros que has pasado (en el ejemplo 3), el segundo recibe los parámetros pasados como un array de cadenas:
argc=3
argv[0]="mi-programa.exe"
argv[1]="-a=file"
argv[2]="-d"
sBuffer bfr;
int r;
r=ky_geturl(sBuffer *bfr); -> ky_geturl(bfr);
NeoSX escribió:También te recomiendo que mires variables globales que uses en todas las funciones. A mi me ayudo en su día.
zheo escribió:NeoSX escribió:También te recomiendo que mires variables globales que uses en todas las funciones. A mi me ayudo en su día.
Y yo te recomiendo que huyas de variables globales como de la peste.
zheo escribió:NeoSX escribió:También te recomiendo que mires variables globales que uses en todas las funciones. A mi me ayudo en su día.
Y yo te recomiendo que huyas de variables globales como de la peste.
Davpk escribió:Y más en DS con su super ram xD
dtcm stands for data tightly coupled memory and is a special area of memory on the ARM9 intended for use as fast data memory. The standard link script places the stack in this area. dtcm is a mere 16k so be careful with those local variables.
NeoSX escribió:zheo escribió:NeoSX escribió:También te recomiendo que mires variables globales que uses en todas las funciones. A mi me ayudo en su día.
Y yo te recomiendo que huyas de variables globales como de la peste.
Personalmente cuando no dominas el pasar variables de una función a otra te quita del apuro, y visto que no lo domina mucho le ayudará. Después es quitar la variable global y recolocarlo, pero para ello tendrá que mirar un poco las funciones.