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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 [75] 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 ... 401
741  Programación / Programación C/C++ / Re: otra manera de escribir *envp++ en: 7 Febrero 2017, 22:38 pm
En estos casos, ten en cuenta el orden en que se llaman los operadores: http://es.cppreference.com/w/cpp/language/operator_precedence

Primero, el post-incremento(_++). Luego, la desreferencia(*).

Código
  1. *envp++;
Eso es lo mismo que:
Código
  1. *(envp++);
El post-incremento retorna el valor que tiene actualmente, e incrementa el valor de la variable (el retorno sigue siendo el antiguo).
Así pues, poner ese * ahí no hace nada funcional.

En caso de que te refieras a:
Código
  1. str = *envp++;
Pues hace lo esperado. str tendrá el valor de *envp, y luego se incrementará.
El compilador usualmente optimizará estas cosas, no es un tema realmente preocupante. Es más importante la legibilidad del código y, por supuesto, la funcionalidad.

Si programases C++, sí que podría tener algo más de repercusión al trabajar con objetos. Pero no mucha más.
742  Programación / Programación C/C++ / Re: Estructuras anidadas en lenguaje C. - en: 5 Febrero 2017, 18:42 pm
El campo de la estructura no se llama "texto_t". Se llama "nombre" o "direccion", según cual quieras.
Código
  1. ptrAlumno->nombre.tipo = 1;
Además, "tipo" no es un puntero, as´ñi que pones "." en vez de "->".
743  Foros Generales / Foro Libre / Re: A quien consideras tu el "padre de la computacion"? en: 5 Febrero 2017, 16:29 pm
El primero en generar un algoritmo fue el primer hombre en pensar, así que tendremos que remontarnos al paleolítico (o antes :X)
744  Programación / Programación C/C++ / Re: Estructuras anidadas en lenguaje C. - en: 5 Febrero 2017, 15:06 pm
Código
  1. void get_String( texto_t * NomDir );
Código
  1. get_String( ptrAlumno->nombre );

ptrAlumno->nombre no es texto_t*, es texto_t. para pasarle la dirección de memoria, el operador &:
Código
  1. get_String( &ptrAlumno->nombre );


Y otra cosa importante:
Código
  1. alumno *ptrAlumno;

es un puntero a alumno, no un alumno. Tienes que reservar memoria:
Código
  1. alumno *ptrAlumno = (alumno*) malloc(sizeof(alumno));

Y un detalle más. Cuando sea así, postea el error. Este era un código corto, pero en códigos largos, sin el error, puede ser complicado ver el problema (y no siempre vamos a compilar nosotros el código para ver los errores)
745  Programación / Programación C/C++ / Re: Como declaro una variable como no dfinida o especificada en C en: 4 Febrero 2017, 18:20 pm
Si nunca trabajaste con cadenas de caracteres o si lo vas  ahacer más adelante, entonces lo mejor que puedes hacer es aceptar el 0 (o un valor negativo) como "comando" para pedir el radio.
Citar
Código
  1.       if(c!=0){
  2.          printf("\n El valor de r es igual a: %f",r);
  3.       }else{
  4.          printf("\n La longitud de la circunferencia es 0");
  5.          printf("\n Defina la variable longitud del radio: ");
  6.          scanf("%.2f", &r);
  7.       }
746  Programación / Programación C/C++ / Re: Como declaro una variable como no dfinida o especificada en C en: 4 Febrero 2017, 17:38 pm
Un int guarda números. Tú quieres leer un número O una línea en blanco. No puedes leer una línea en blanco en un int, así que hay que hacerlo al revés: primero, leer la línea que introduce el usuario como una cadena, y luego, si no está vacía, transformarla en int. Eso es lo que hago en el mensaje que puse antes. Si no entiendes algo de esos códigos, dímelo. Pero esa es una manera.
747  Programación / Programación C/C++ / Re: Como declaro una variable como no dfinida o especificada en C en: 4 Febrero 2017, 16:40 pm
Los códigos que te puse son cortos. Dime qué partes no entiendes, y las explico.

Citar
Código
  1.   if(c!=0){
  2.      printf("\n El valor de r es igual a: %f",r);
  3.   }else if(c==0){
  4.      printf("\n La longitud de la circunferencia es 0");
  5.      EXIT?                                       // Como hago para salir de la condición "else if"?
  6.   }else{
  7.      printf("\n Defina la variable longitud del radio: ");
  8.      scanf("%.2f", &r);
  9.   }

Si de la segunda condicion quieres pasar directamente al else, pues, directamente, mételo todo junto:

Código
  1.   if(c!=0){
  2.      printf("\n El valor de r es igual a: %f",r);
  3.   }else{
  4.      printf("\n La longitud de la circunferencia es 0");
  5.      printf("\n Defina la variable longitud del radio: ");
  6.      scanf("%.2f", &r);
  7.   }

Además, no necesitas poner la condición "c==0". Si no se cumple "c!=0" significa que siempre se cumplirá "c==0".
748  Programación / Programación C/C++ / Re: Como declaro una variable como no dfinida o especificada en C en: 4 Febrero 2017, 16:14 pm
Para lo que buscas:

Utiliza fgets para leer en la cadena. Si el usuario pulsa enter, la cadnea tendrá longitud 1 y su primer caracter será el salto de linea:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. char c[50];
  6. fgets(c, 50, stdin);
  7.  
  8. printf("%i - %i", (int)c[0], strlen(c));
  9. }

Luego, si no es un salto de línea, conviertes la cadena a un int con stoi:
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main(){
  5. char c[50];
  6. fgets(c, 50, stdin);
  7.  
  8. if(c[0] != '\n'){
  9. int n = atoi(c);
  10. printf("%i", n);
  11. }
  12. }
749  Programación / Programación C/C++ / Re: RegSetValueEx me crea la regla en chino? en: 4 Febrero 2017, 14:54 pm
Perdona que responda así, pero me tengo que ir y no quería dejar esto:
https://github.com/ivancea/Varios/blob/master/C%2B%2B/reg.h

Échale u ojo a cómo lo llamo ahí. *Creo que funcionaba correctamente*. Luego cuando esté si no te funcionó así, lo pruebo.

EDITO: Ya lo probé, y bien. Ese RegSetValueEx, en mi caso, llama a RegSetValueAxA (la versión ANSI). También podrías llamar explícitamente a RegSetValueKeyExW usando wstring.

Código
  1. #include <windows.h>
  2. #include <iostream>
  3.  
  4. void regAdd(HKEY type, std::string ruta, std::string valor, std::string data){
  5.    HKEY key;
  6.    RegCreateKey(type,ruta.c_str(),&key);
  7.    RegSetValueExA(key, valor.c_str(), 0, REG_SZ, (const BYTE*)data.c_str(),data.size());
  8.    RegCloseKey(key);
  9. }
  10.  
  11. int main(){
  12. regAdd(HKEY_CURRENT_USER, "Test", "prueba", "datos");
  13. }

Y con respecto al error que tienes tú:
En el primer código que pusiste, no puedes llamar a strlen con de TCHAR*. Yo de ti prescindiría de los LPCTSTR y pasaría directamente los valores de las string. Y bueno, en vez de strlen, valor.size().
750  Programación / Programación C/C++ / Re: [C++][Consulta] Error inesperado con destructor en: 3 Febrero 2017, 14:35 pm
Código
  1. void Eliminar(ArbolBinario *rama) {
  2.   if(NULL != rama->izda)
  3.      Eliminar(rama->izda);
  4.  
  5.  if(NULL != rama->dcha)
  6.      Eliminar(rama->dcha);
  7.  
  8.   delete rama;
  9. }

Eliminar no establece las ramas a NULL. COn esta función recursiva, estás eliminando todas las ramas, pero de manera incorrecta:
Primero, liberas la memoria de cada lado de la rama. Luego, llamas al destructor de la rama y la liberas. El destructor de la rama, ya llama a Eliminar. Solo que ahora, llama a Eliminar sobre unas ramas que no apuntan a nada válido.
Páginas: 1 ... 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 [75] 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 ... 401
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines