elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8
51  Programación / Programación C/C++ / variable global en: 12 Febrero 2017, 03:55 am
Hola, si quiero declarar estas variables globales

int D1=2;
int D2 = D1-2;

int main(int argc,char* argv[])
{
}

porque me manda un error el compilador aqui int D2 = D1-2; ?
dice initializer const is not constant
52  Programación / Programación C/C++ / punto medio en cmd en: 12 Febrero 2017, 03:38 am
Hola en el siguiente codigo, alguien me podria explicar estas lineas

Citar
#define PTO_MEDIO(s) (40 - strlen((s))/2 )

Citar
printf("%*s",PTO_MEDIO(texto) - 1," ");

No entiendo en la primera por que es 40 - ... si para el punto medio se supone que deberia ser una suma,

en la segunda no entiendo por que se le resta 1 al resultado :l

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define ANCHO_MAX 80
  6. #define PTO_MEDIO(s) (40 - strlen((s))/2 )
  7.  
  8. int main(int argc,char* argv[])
  9. {
  10.    char texto[79]; /*78 caracteres + '\0'*/
  11.    int i,j;
  12.  
  13.    do{
  14.        printf("Introduce un texto: ");
  15.        fflush(stdin);
  16.        fgets(texto,79,stdin);
  17.        if(strlen(texto)==78)
  18.        {
  19.            if(texto[77]=='\n')
  20.                texto[77]='\0';
  21.        }
  22.        else
  23.            texto[strlen(texto)-1]='\0';
  24.    }while(strlen(texto)==0);
  25.  
  26.    printf("\n");
  27.  
  28.    /*
  29.  
  30.     Ponemos 5 filas y strlen(texto) + 2 columnas
  31.  
  32.     Esto se puede cambiar introduciendo variables para crear un tabla con otras dimensiones
  33.  
  34.     */
  35.  
  36.    for(i=0;i<5;i++)
  37.    {
  38.        if(strlen(texto)<77)
  39.            printf("%*s",PTO_MEDIO(texto) - 1," ");
  40.  
  41.        if(i==0 || i==4)
  42.            for(j=0;j< strlen(texto) + 2;j++)
  43.                printf("*");
  44.        else if(i==2)
  45.        {
  46.            printf("*%s*",texto);
  47.        }
  48.        else
  49.        {
  50.            printf("*%*s*",strlen(texto)," ");
  51.        }
  52.  
  53.        if(strlen(texto)<78)
  54.            printf("\n");
  55.        /*else se llega al final de la linea y automaticamente el cursor pasa a estar en la
  56.         primera posicion de la siguiente linea*/
  57.    }
  58.  
  59.    printf("\n");
  60.    system("PAUSE");
  61.  
  62.    return 0;
  63. }
  64.  
53  Programación / Programación C/C++ / Re: Porque no puedo pasarle la direccion de la cadena? strtol en: 12 Febrero 2017, 02:55 am
era para saber si estaba bien la logica del porque da ese error XDD pero gracias de todos modos
54  Programación / Programación C/C++ / Re: Porque no puedo pasarle la direccion de la cadena? strtol en: 12 Febrero 2017, 02:37 am
Amigo, mira comente mi codigo, segun lo que tu me explicaste, me podrias decir si esta correcto

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. char str[30] = "2030300 This is test";
  7.  
  8. char *ptr;
  9. long ret;
  10. printf("\nLa cadena inicial es: %c%s%c\n",34,str,34);
  11.  
  12. ret = strtol(str, &ptr, 10); //en simples palabras strtol recibe una cadena que tenga numero y palabra (en ese orden) y el numero que tenga adelante lo retorna como long int, y la palabra siguiente de la cadena la pasa a otra cadena
  13. printf("\nThe number(unsigned long integer) is %ld\n", ret);
  14. printf("String part is |%s|\n", ptr); //ojo que a la cadena le agrego el espacio despues del ..300 This..
  15.  
  16.  
  17. //Que pasa si pongo un char ? por la premisa de que el nombre de un arreglo es un puntero a la dir de mmeoria del primer elemento (la misma la dir de todo el arreglo)
  18. char prueba[20];
  19. ret = strtol(str, &prueba, 10);
  20. printf("\nProbando: %c%s%c\n",34,prueba,34);
  21. /* Da error eso se debe a que para empezar porque Conceptualmente no puedes modificar la dirección de un arreglo, ya que strotl lo que hace es
  22. devuelve, además del número, la dirección del primer elemento que se ha encontrado que no es dígito, o sea de vuelve la direccion de "(espacio)", espacio por que antes de "This" hay un espacio.
  23. como un arreglo se comporta ocmo puntero pero No lo es, lo que estaria diciendo es que prueba ahora apunta a la dir de memoria del "espacio" pero no se puede
  24. si es puntero lo que estoy diciendo en el caso de ptr es que ptr apunta a la dir de memoria de "espacio", es decir p= "dir de memoria del "espacio""
  25. */
  26.  
  27.   return(0);
  28. }
  29.  
  30.  
55  Programación / Programación C/C++ / Re: Porque no puedo pasarle la direccion de la cadena? strtol en: 12 Febrero 2017, 01:26 am
grnde hermano , muchas gracias, me quedo claro
56  Programación / Programación C/C++ / Re: Porque no puedo pasarle la direccion de la cadena? strtol en: 11 Febrero 2017, 23:56 pm
No, una de las cosas que hace strtol es guardarte en la dirección que le pasas la dirección del primer elemento después del número.

No te entendi eso muy bien amigo, cuando dices "la direccion del primer elemento despues del numero" podrias detallarlo un poco mas, graciass
57  Programación / Programación C/C++ / Re: Porque no puedo pasarle la direccion de la cadena? strtol en: 11 Febrero 2017, 23:11 pm
Hola gracias por responder, pero con strtol no estoy modificando la direccion del puntero simplemente llenandolo. poniendo caracteres dentro

Ademas yo lei en una parte que decia, "los arreglos se puede decir que son punteros disfrazados"  ya que el nombre de un arreglo es un puntero a la direccion de memoria del primer elemento del arreglo (que es la misma dir del arreglo), es por eso que cuando
si tengo

char prueba[20];
char *p ;

puedo usar %s de la misma forma que en ambos, printf("%s y %s",prueba,p);
porque prueba se comporta como un puntero. me explico ? entonces no entiendo porque aca no se puede pasar la dir de memoria del arreglo
58  Programación / Programación C/C++ / Porque no puedo pasarle la direccion de la cadena? strtol en: 11 Febrero 2017, 22:39 pm
Hola tengo este codigo, se supone que la funcion strtol recibe u puntero doble, pero se supone que la cadena "prueba" es un puntero que apunta  ala direccion de memoria del primer elemento de la cadena, o sea es como si le estuviera pasando la dir de un puntero, no se si me explico , de todos modos no me funciona :/ da un warning

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. char str[30] = "2030300 This is test";
  7. char prueba[20];
  8. char *ptr;
  9. long ret;
  10. printf("\nLa cadena inicial es: %c%s%c\n",34,str,34);
  11.  
  12. /*  long int strtol(const char *str, char **endptr, int base)
  13. //strtol converts the initial part of the string in str to a long int value according to the given base.
  14. whose value is set by the function to the next character in str after the numerical value.
  15. */
  16. ret = strtol(str, &ptr, 10);
  17. printf("\nThe number(unsigned long integer) is %ld\n", ret);
  18. printf("String part is |%s|\n", ptr);
  19.  
  20. ret = strtol(str, &prueba, 10);
  21. printf("\nProbando: %c%s%c\n",34,prueba,34);
  22.  
  23.   return(0);
59  Programación / Programación C/C++ / Re: No guarda la cadena dentro del vector en: 9 Febrero 2017, 23:59 pm
Oh sí. La única peculiaridad es la de la constante. A parte de eso, eres libre.

cual seria la constante hermano ?

Citar
Como en los códigos de arriba lo hicisteis todo con malloc, pues por si acaso xD

ah jajaj Tu dices para haberlo hecho asi como dices tu adentro del for?

Código
  1. int main()
  2. {
  3. int i,j;
  4. char *vector[50];
  5.  
  6. vector = (char**)malloc(2*sizeof(char*));
  7.  
  8. for(i=0; i<2; i++)
  9.    {
  10.        printf("Ingrese una palabra: ");
  11.        scanf("%s",vector[i]);
  12.    }
  13.  

 en vez de haber pedido memoria con malloc asi ?

Código
  1. int main()
  2. {
  3. int i,j;
  4. char **vector;
  5.  
  6. vector = (char**)malloc(2*sizeof(char*));
  7.  
  8. for(i=0; i<2; i++)
  9.    {
  10.        vector[i] = (char*)malloc(100*sizeof(char));
  11.        printf("Ingrese una palabra: ");
  12.        scanf("%s",*(vector+i));
  13.    }
  14.  

:P, otra cosa, no se como funcione este foro, pero no hay manera de darte puntos o algo xd ? tus respuestas siempre me resuelven las dudas que tengo ::)
60  Programación / Programación C/C++ / Re: No guarda la cadena dentro del vector en: 9 Febrero 2017, 23:29 pm
No se debe modificar una cadena literal ("abc"). El comportamiento de esto no está definido. Hay compiladores que colocan la cadena en una zona de memoria de solo-lectura, por ejemplo.

Para leer nuevos datos, tendrás que reservar nueva memoria.

Por cierto, depende de las necesidades pero, también se puede hacer esto con un array:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    char str[50];
  5.  
  6.    scanf("%s", str);
  7.  
  8.    printf("%s", str);
  9. }

De lo primero no tenia idea que no se pued modiifcar una cadena definida como "cosa" pero si se puede hacer es pedir un scanf para una cadena y luego volver a pedir otro scanf para la misma cadena y ahi que si se reemplace ?

y de lo segundo que me dijiste de este codigo
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    char str[50];
  5.  
  6.    scanf("%s", str);
  7.  
  8.    printf("%s", str);
  9. }

Tu pusiste , "por ciento tambien se puede trabajar asi" pero yo en verdad siempre los trabajo asi XD , cual seria la otra forma de leerlo completo e imprimirlo completo ?
ojala me entiendas hermano, saludos!
Páginas: 1 2 3 4 5 [6] 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines