Foros del Web » Programación para mayores de 30 ;) » C/C++ »

FAQs del lenguaje C y sus variantes

Estas en el tema de FAQs del lenguaje C y sus variantes en el foro de C/C++ en Foros del Web. Problema: Problemas con punteros, direcciones, estructuras, ec Variante: C/C++ Solucion: Cuando uno ya conoce los punteros y su utilidad basica, puede que aun caiga en ...

  #31 (permalink)  
Antiguo 15/08/2006, 21:22
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.747
Antigüedad: 14 años, 2 meses
Puntos: 52
Problema: Problemas con punteros, direcciones, estructuras, ec
Variante: C/C++
Solucion:

Cuando uno ya conoce los punteros y su utilidad basica, puede que aun caiga en algunos problemas "graves" que podrian incluso inestabilizar a todo el sistema(windows, linux, unix, etc).

1)Problema de los punteros no inicializados.

Es comun este tipo de error en programadores novatos e incluso en programadores de nivel intermedio. Un ejemplo de este error es el siguiente:

int *p;
*p=1;

Para un programador de nivel basico esto resultaria correcto, incluso el compilador lo compila sin problemas. ¿Cual es el error?
Simple, el puntero "p" no esta inicializado, esto quiere decir que p esta apuntando a "cualquier direccion", esta direccion puede contener datos del sistema operativos(en el peor de los casos), datos de algun otro proceso(casos menos peligroso pero igual de graves), datos de tu propio programa(simplemente el programa da efectos secundarios extraños), o datos en la memoria vacia(en el mejor de los casos). Esto obviamente es muy inseguro y compromete la estabilidad el sistema, aparte que este tipo de errores es dificil de identificar en proyectos grandes, ya que el compilador no genera ningun tipo de advertencia.
¿Como solucionar el problema?

Simplemente "apartando" memoria para ese puntero.

En C, la manera tradicional, es usando la funcion de stdlib.h void *malloc(int size);
Esta funcion almacena tantos bytes como size indique y devuelve un puntero a esta memoria apartada. Entonces nuestra correcion quedaria asi:

int *p;
p=(int *)malloc(sizeof(int));
*p=1;

En el caso de c++ se usa el operado new de esta manera:

int *p;
p=new int;
*p=1;

Con esto nos aseguramos que estamos en un area de memoria segura. El operador sizeof se utiliza para obtener el tamaño de alguna estructura o tipo de dato, en este caso es int(en los procesadores de 32 bits int tiene tamaño de 32 bits esto es 4 bytes), por consiguiente

p=(int *)malloc(sizeof(int));

y

p=(int *)malloc(4);

son equivalentes SIEMPRE Y CUANDO el tamaño de int sea de 32 bits.

El operador (int *) es para especificar que el resultado sera un puntero de tipo int y no void como malloc lo marca.

En C++ el operador new facilita aun mas la tarea.

p=new unsigned char[4];

es igual a

p=new int;

ya que unsigned char es lo mismo que un byte.


(Continua)

Última edición por Instru; 11/02/2007 a las 17:58
  #32 (permalink)  
Antiguo 15/08/2006, 21:42
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.747
Antigüedad: 14 años, 2 meses
Puntos: 52
(Continuacion)

2)Sobrepasar la memoria apartada ya sea por puntero o por arreglo.

Otro error comun incluso en programadores expertos es este, usar memoria que esta mas alla de la apartada. Este error generalmente es de 2 tipos:
-Por arreglos estatico
-Por arreglos dinamicos o punteros.

Un ejemplo por arreglos estaticos:

int array[5];
int i;

for(i=0; i<=5; i++)
{
array[i]=i;
}

A simplem vista este programa parece correcto, incluso para programadores expertos es dificil encontrar estos tipos de errores. ¿Cuál es el error?
Estas sobrepasando los 5 espacios de memoria de el arreglo.
Como el 0 tambien cuenta como espacio de memoria, esto haria 5 localidades de la siguiente manera:

0- 1- 2- 3- 4
l1- l2- l3- l4- l5

l1=localidad1
l2=localidad2
.
.
etc...

Entonces el problems es el "<<B>=</B>5, porque esto significa que tambien modificara la localida 6!
La forma de corregirlos es la siguiente:

int array[5];
int i;

for(i=0; i<5; i++)
{
array[i]=i;
}

En conclusion, al declarar una rreglo estatico, el numero de valores que tendra sera el especificado menos 1 empezando del 0:

char array[256];
va desde 0 hasta 255(que en realidad son 256 valores).

Este error es sencillo, ya que es para fines explicativos, pero hay veces que en proyectos mas grandes los errores son mucho mas dificles de encontrar porque no tenemos el valor implicito. Un ejemplo sencillo de esto:

int array[10];
int val;

scanf("%d", &val);
array[val]=1;

Igual, el error es invisible practicamente. De hecho este programa no tiene error. Es totalmente correcto siempre y cuando el usuaro no meta valores iguales o mayores a 10.

Si el usurio mete un valor 55 por ejemplo, entonces estamos escribienndo mas alla de los limites permitidos. Como veran este error es mucho mas dificil de corregir, ya que aveces puede no fallar y aveces puede fallar. Y peor aun, este tipo de errores "confunde" a los depuradores mas potentes ya que al escribir en memoria fuera del limite, puede que cambies el valor de una de tus propias variables y el depurador te dice que el valor cambió y tu no puedes saber porque ya que este cambio es "de repente", sin asignacion alguna. Como dije, este tipo de error es de los mas comunes, mas dificiles de depurar y tediosos. Siempre es recomendable tener un control sobre las direcciones que un punero puede tener:

int array[10];
int val;

scanf("%d", &val);
if(val>=10)
{
printf("Escriba un valor menor a 10\n");
exit(0);
}
array[val]=1;

Esto aunque aparentemente no va a dar mas problemas no es muy recomendable, ya que esto es lo que se llama "trabajar con punteros de manera peligrosa". Hay que evitar lo peligroso de los punteros a toda costa para asi no tener que esar depurando programas que cambian valores de sus variables espontaneamente o incluso desestabilizar el sistema.

(Continua)
  #33 (permalink)  
Antiguo 15/08/2006, 22:01
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.747
Antigüedad: 14 años, 2 meses
Puntos: 52
Ahora veremos el mismo tipo de error pero en arreglos dinamicos o punteros.
Primero antes que nada. Hay que aclarar unos conceptos.

-Un arreglo estatico es lo mismo que un puntero con memoria asignada

int p[5];

es igual a

int *p;
p=(int *)malloc(sizeof(int)*5);

-Por consiguiente un puntero puede ser usado como un arreglo

int *p;
p=(int *)malloc(sizeof(int)*5);
p[0]=0;
p[1]=1;

Es totalmente valido

-Igualmente un arreglo puede ser usado como un puntero

int p[5];

*p=0;
p++;
*p=1;

Con estos conceptos aclarados podremos ver que en si el tipo de error es el mismo, solo que mas dificil de depurar:

int *p, val, i;
val=scanf("%d", &val);
p=(int *)malloc(sizeof(int)*val);
for(i=0; i<255; i++)
{
*p=i;
p++;
}

Igualmente, parece un programa inofensivo, pero una vez mas, se esta trabajando con punteros "de manera peligrosa". Estas dejando al usuario elegir el tamaño de la memoria. Si el usuario pone un valor menor a 255 entonces el programa puede compremeter la estabilidad de procesos, el sistema, el programa en si mismo, etc.
Una vez mas, es recomendable no usar los punteros de esta forma peligrosa, al menos que "sepas lo que haces"(cada quien puede usar los punteros como se le de la gana).

Ahora abordando ese tipo de error en arreglos estatico y dinamicos imagina que en vez de un usar un scanf donde pides el valor al usuario, usas otro tipo de procesos. Por ejemplo, haces todo un calculo para calcular la direccion de la varibale:

int funcion(int argumento)
{
//Calculos complejos
return (calculo|(argumeto<<4)^0x80FF);
}
int main()
{
int *p;
p=(int *)malloc(sizeof(int)*0xFFFF);
p[funcion(100)]=1;
}

Mientras la funcion "funcion" regrese un valor menor a 0xFFFF no habra ningun problema, pero si la funcion compleja regresa algun valor fuera del rango 0-0xFFFF(ya sea por algun error en la funcion, etc), entonces estaras usando memoria mas alla del limite. No hay manera "comun" de corregir estos problemas, aqui lo ideal, es revisar la funcion para ver si esta regresando valores dentro del rango, usar un perador AND para filtrar el valor de regreso o una condicion if para saber si el valor devuelto por la funcion es dentro del rango. Todo depende del proyecto.

(Continua)
  #34 (permalink)  
Antiguo 15/08/2006, 22:14
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.747
Antigüedad: 14 años, 2 meses
Puntos: 52
3)Regreso de referencia de una variable en una funcion.

Otro error comùn es este, regresar una referencia de una variable que esta dentro de una funcion:

int *funcion(void)
{
int valor;
//Calculo de valor
return &valor;
}

Este error no es muy comun, pero suele pasar.
Al invocar una funcion, y crear una variable dentro de esta, la varible es temporal, es decir, se destruye al terminar la funcion.
Entonces que pasa en este ejemplo? Simple. La funcion regresa la direccion de la varibale local temporal y despues destruye la variable. Entonces que pasa con la direccion? Pues queda apuntando a donde antes estaba esa variable, memoria que ahora puede estar en uso por otra variable o proceso.

Hay 2 formas de solucion este problema:

int *funcion(void)
{
int *valor;
valor=(int *)malloc(sizeof(int));
//Calculo de valor
return valor;
}

Esto asegurara que el espacio seguira apartado incluso al salir de la funcion, ya que la unica manera de liberar ese espacio es usando la funcion free(puntero);

La segunda manera es:

int *funcion(void)
{
static int valor;
//Calculo de valor
return &valor;
}

EL modificador static lo que hace es que la variable no sea destruida al terminar la funcion y gracias a esto, al regresar el valor y terminar la funcion, la variable valor seguira en su lugar y la direccion sera correcta.

...


Por hoy hasta aqui, para dudas y comentarios, usen otro post. Para corregirme mandenme un MP, no soy perfecto en la programacion de C pero trato de serlo, y la unica manera es que me corrijan cuando ando mal. Espero pronto poner mas sobre punteros ya que son la aparte mas poderosa que el lenguaje mas poderoso puede tener.

Saludos
  #35 (permalink)  
Antiguo 18/04/2007, 16:54
 
Fecha de Ingreso: febrero-2007
Mensajes: 25
Antigüedad: 9 años, 11 meses
Puntos: 1
Re: FAQs del lenguaje C y sus variantes

Problema: ¿Como instalo C/C++ en mi Sistema Operativo?
Variante: C/C++
Respuesta:

C/C++ no son programas, son lenguajes de programacion. Como todos saben (o espero que ya lo sepan), las computadoras solo entienden con pulsaciones electricas, generalmente nosotros las representamos con 0 y 1 para tension baja y tension alta respectivamente. Con el tiempo se fueron creando lenguajes de programacion que fueran facil de aprender para los seres humanos.

Bueno, C/C++ son eso, lenguajes que se crearon para que los humanos pudieramos comunicarnos con la computadora. Pero como la computadora no entiende estos lenguajes, necesitamos un traductor, ese traductor es un programa, ese programa tiene que estar instalado en la PC, ya sea en GNU/Linux, Windows, Mac OS o cualquie Sistema Operativo que uses, para que la computadora entienda lo que le quisiste decir al crear cierto programa.

En GNU/Linux generalmente se usa el compilador gcc (para C) y g++ (para C++). En Windows tambien existen estos compilador, pero hay otros como el de Borland o el de Microsoft Visual C++.

Lo que hay que entender es que C/C++ no se instalan, se aprenden y lo que se instala son los traductores*, pero no el lenguaje en sí.

* - Al traductor se le llama Compilador. Así que lo que tienes que instalar es el compilador y no el lenguaje.
  #36 (permalink)  
Antiguo 09/06/2007, 09:44
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 508
Antigüedad: 11 años, 2 meses
Puntos: 18
Re: FAQs del lenguaje C y sus variantes

Prblema: como empiezo?
Respuesta: con el tipico Hello world u Hola mundo

hace un tiempo encontré esta página que da los Hello world de muchos lenguajes http://www2.latech.edu/~acm/HelloWorld.shtml
  #37 (permalink)  
Antiguo 06/06/2008, 18:18
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 10 años
Puntos: 36
Respuesta: FAQs del lenguaje C y sus variantes

Pregunta: Cómo validar fechas?
Respuesta: Con este código:

Código:
#include<stdio.h>
#include<conio.h>
int anioBisiesto(int);
int cantDias(int,int);
int esFechaCorrecta(int, int, int);

int main(){
    
int anio, mes, dia;

printf("Ingrese fecha en formato dd/mm/yyyy: ");

scanf("%d/%d/%d", &dia, &mes, &anio);


if(esFechaCorrecta(dia,mes,anio) == 1)

printf("Ok");

else

printf("No");

getch();

}



int anioBisiesto(int anio){

if((anio % 100) % 4 == 0)
         
return 1;
                
else

return 0;

}





int cantDias(int mes, int bisiesto){
    
int dias;

if(mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 11){

dias = 31;      
       
}else{

if(mes == 2){
       
if(bisiesto == 1){
                
dias = 29;

}else{
      
dias = 28;

}

}else{

dias = 30;
      
}            
}

return dias;

}







int esFechaCorrecta(int dia, int mes, int anio){
    
int bisiesto, cant_Dias;

bisiesto = anioBisiesto(anio);

cant_Dias = cantDias(mes, bisiesto);
    
if(anio > 1900 && anio < 2009 && mes <= 12 && mes >= 1 && dia <= cant_Dias && dia >=1)

return 1;

else

return 0;
    
}
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #38 (permalink)  
Antiguo 08/09/2008, 08:22
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: FAQs del lenguaje C y sus variantes

Lenguaje: C
Pregunta: Donde encuentro un manual de Sockets?
Respuesta:

Sockets para Windows: http://materias.fi.uba.ar/7542/herra...php?i=socketst

Sockets para Linux (y con pocos cambios, windows compatible ) :http://www.arrakis.es/~dmrq/beej/index.html
__________________
Habla tu lenguaje favorito! Habla C++!
  #39 (permalink)  
Antiguo 25/05/2010, 13:13
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: FAQs del lenguaje C y sus variantes

cuales librerias graficas libres puedo usar?

juce: libreria grafica y para pluging de audio. interfaces para aplicaciones con un estilo agradable y multiplataforma.
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #40 (permalink)  
Antiguo 28/08/2010, 15:41
 
Fecha de Ingreso: julio-2010
Mensajes: 29
Antigüedad: 6 años, 6 meses
Puntos: 0
Respuesta: FAQs del lenguaje C y sus variantes

Bueno yo estoy aprendiendo c++ usando el compilador -->> Dev-C++ pero el problema es que he tratado de instalar este compilador en mi pc (tengo windows 7 home premium de 64 bits) y pues me sale error y creo que un problema de bits.
Yo estoy usando la version Dev-c++ 4. y no puedo instalarlo y realmente necesito esta version. Gracias si alguien me da alguna solucion.
  #41 (permalink)  
Antiguo 31/08/2010, 01:29
 
Fecha de Ingreso: agosto-2010
Ubicación: MX
Mensajes: 2
Antigüedad: 6 años, 4 meses
Puntos: 0
De acuerdo Libros de C/C++/C# ( Todos los niveles )

Una pequeña coleccion de libros y manuales de C y C Plus Plus.


http://www.mediafire.com/?xmyhzwzfvqz --> (C/C++)

http://www.mediafire.com/?0m3e2kjgn2i --> Deitel & Deitel C

http://www.mediafire.com/?52tdmmuddyn --> El lenguaje de programacion C, Ritchie & Kernighan

http://www.mediafire.com/?myomzz2zdly --> Luis Joyanes Aguilar - Programacion en C, metodologia, algoritmos y estructuras.

http://www.mediafire.com/?oydmf2zzgh2 --> Stroustrup Bjame - El lenguaje de programacion C++

http://www.mediafire.com/?qwwiidwtnyy ---> Programacion O.O. CPP

http://www.mediafire.com/?nmm2zotwfwt ---> Tecnicas Avanzadas de Programacion en C++

http://www.mediafire.com/?qnnlrtlu4zn ---> Programar Juegos en C (Eng)

http://www.mediafire.com/?ntmnuydonrz ---> Ejemplos de C

http://www.mediafire.com/?ixi22m1mzjq --->Bruce Eckel - Pensar en C++

http://www.mediafire.com/?yl3qqty33xx ---> Manejo de Archios en C

http://www.mediafire.com/?yl3qqty33xx ---> Introduccion a C

http://www.mediafire.com/?guzoytmxzjk ---> Aprenda ANSI C desde cero.

http://www.mediafire.com/?ymz1dlm2ymk ---> programacion en C, Prada

http://www.mediafire.com/?3jirnekhiou ---> El lenguaje C#

http://www.mediafire.com/?g5uxa1mhunn ---> C#


Batch.pdf (By RevangelyonX)
---> http://www.mediafire.com/?djydiyezn4t

Conceptos basicos de Graficacion en C++(2004-I).pdf
---> http://www.mediafire.com/?wa4m25idozk


El C++ por la práctica, introducción al lenguaje y su filosofía.pdf
(Lluís Gil Espert
Montserrat Sánchez Romero)
---> http://www.mediafire.com/?mwjmay2ytvm

Impresion de graficos en C++.pdf
---> http://www.mediafire.com/?rznyvjzd2jz


Manejo del mouse en lenguaje C++ (2004-I).pdf
---> http://www.mediafire.com/?dttjn2yzxwz

Metodología de la programación orientada a objetos con C++.pdf
---> http://www.mediafire.com/?jqexdaretmg

Programación de Sistemas de Archivos
Secuenciales con Obje tos en Lenguaje C++
(Bruno López Takeyas)
---> http://www.mediafire.com/?nnmntzqzzym

Programación gráfica en C.pdf
--> http://www.mediafire.com/?uazdjazyz3w

Programación Windows API con C++.pdf
(Salvador Pozo Coronado)
--> http://www.mediafire.com/?mknnztoxwkm


Técnicas avanzadas de programación en
Lenguaje C++”
(M.C. Bruno López Takeyas)
--> http://www.mediafire.com/?yzdwzyyqczj


La esencia de la logica de programacion - Omar Trejos Buritica (muy bueno para pricipiantes)
---> http://www.mediafire.com/?r83dzuicnj1eczo

Cualquier problema con los enlaces diganme.

Saludos, Raly.
  #42 (permalink)  
Antiguo 15/09/2010, 07:52
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: FAQs del lenguaje C y sus variantes

Hola,

si me permiten, hay una cosita que no me parece bien dicho:
Cita:
Iniciado por Instru Ver Mensaje
C++ en primer lugar es totalmente compatible con C
Eso no es verdad. Ni en un sentido (C -> C++) ni en el otro (C++ -> C). Por ejemplo, un puntero de funcion existe en C, pero no en C++. El void* tampoco existe en C++. Hay muchas cosas distintas. El C y el C++ son dos lenguajes con una base común, pero son dos lenguajes distintos y lo son cada vez más.

Hay una base común, eso si, pero no son 100% compatibles. De hecho, los compiladores C y C++ son muy distintos. Por ejemplo, no se compila un programa escrito en C++ con gcc, sino con g++ (aunque no nos damos cuenta, porque para ejecutar g++, solemos utilizar gcc, pero gcc sabe reconocer si un codigo es de C o de C++).
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #43 (permalink)  
Antiguo 15/09/2010, 13:38
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: FAQs del lenguaje C y sus variantes

Cita:
Iniciado por r0d Ver Mensaje
Hola,

si me permiten, hay una cosita que no me parece bien dicho:
Eso no es verdad. Ni en un sentido (C -> C++) ni en el otro (C++ -> C). Por ejemplo, un puntero de funcion existe en C, pero no en C++. El void* tampoco existe en C++. Hay muchas cosas distintas. El C y el C++ son dos lenguajes con una base común, pero son dos lenguajes distintos y lo son cada vez más.

Hay una base común, eso si, pero no son 100% compatibles. De hecho, los compiladores C y C++ son muy distintos. Por ejemplo, no se compila un programa escrito en C++ con gcc, sino con g++ (aunque no nos damos cuenta, porque para ejecutar g++, solemos utilizar gcc, pero gcc sabe reconocer si un codigo es de C o de C++).
¿Que void* no existe en c++? no estoy de acuerdo , solo puedo decir que c++ es una espanción de c. y void* si existe en c++
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #44 (permalink)  
Antiguo 16/09/2010, 08:22
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: FAQs del lenguaje C y sus variantes

Hola,

si efectivamente el void* existe en C++. Me he confundido con la conversion implicita de void*, que es posible en C pero no en C++.
Hay varias cosas que funcionan en C pero no en C++. Aquí hay una lista, pero está incompleta porque faltan los cambios del nuevo estandar c++. Por ejemplo la palabre clave auto ya hace la misma cosa en C y en C++.

El C++ ha sido construido encima del C. Dicho de otra forma, el C es la base del C++. Pero desde entonces, los dos lenguajes han seguido caminos distintos, y ya son bastante distintos.

Por ejemplo, los cabeceras C y C++ son bien distintas (stdio.h, cstring.h, etc. en C | iostream, string, etc. en C++).
Los compiladores son distintos (por ejemplo: gcc para el C, g++ para el C++).

Aquí tienes una buena comparación bastante exhaustiva de las incompatibilidades entre C y C++: http://david.tribble.com/text/cdiffs.htm
Si no temes el ingles, te aconsejo leer este papel: http://www2.research.att.com/~bs/crc.pdf
El la base de todo. Y ya veras que Stroustrup pensó el C++ como un lenguaje distintos del C, y no como una capa añadida.

Insisto un poco en esto, porque creo que este punto es importante. Suelo ver mesclas de C y de C++, en los foros o en el codigo de los principiantes en ambito profesional. Y mesclar el C y el C++ puede ser una buena cosa, cuando se sabe perfectamente lo que se hace, pero cuando no se sabe, el resultado es horrible. Te prometo que, a nivel profesional (con los problemas de productividad, mantenimiento, etc.) es un problema gordo. Sobre todo en españa.
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web

Última edición por r0d; 16/09/2010 a las 09:04
  #45 (permalink)  
Antiguo 22/09/2010, 13:32
 
Fecha de Ingreso: julio-2010
Mensajes: 29
Antigüedad: 6 años, 6 meses
Puntos: 0
Respuesta: FAQs del lenguaje C y sus variantes

Cita:
Iniciado por ViktorAndres Ver Mensaje
Bueno yo estoy aprendiendo c++ usando el compilador -->> Dev-C++ pero el problema es que he tratado de instalar este compilador en mi pc (tengo windows 7 home premium de 64 bits) y pues me sale error y creo que un problema de bits.
Yo estoy usando la version Dev-c++ 4. y no puedo instalarlo y realmente necesito esta version. Gracias si alguien me da alguna solucion.


Alguien me ayuda con mi problema? =(
  #46 (permalink)  
Antiguo 22/09/2010, 13:42
 
Fecha de Ingreso: julio-2010
Mensajes: 29
Antigüedad: 6 años, 6 meses
Puntos: 0
Respuesta: FAQs del lenguaje C y sus variantes

Disculpen, con respecto a este problema que tengo con windows 7 home premium, pues esta version la 4. de dev- no coje por un problema de bits, ya que con el de 32 bits si funciona por lo que he podido leer pero con la de 64 no, ahora ya que yo sigo teniendo esta dificultad, he decidido usar una de las ultimas versiones ya que con esas no hay problemas, pero mi problema es que cuando desarrollo un programa pues siempre tengo problemas que no llego a entender =( y creo que son las librerias =/
  #47 (permalink)  
Antiguo 23/09/2010, 03:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Melita
Mensajes: 6.191
Antigüedad: 12 años, 8 meses
Puntos: 74
Respuesta: FAQs del lenguaje C y sus variantes

¿No hay moderadores en este foro? ViktorAndres: ¿No ves el titulo del hilo? NO es un lugar donde plantear dudas precisamente.
__________________
Luche y vuelve! Nacional y Popular
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #48 (permalink)  
Antiguo 24/09/2010, 09:51
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: FAQs del lenguaje C y sus variantes

Problema: ¿Como convertir un char* en un std::string?
Lenguaje: C++
Respuesta: Utilizando el constructor or el operador de asignación
Código:
std::string str2( "hola" ); // constructor
std::string str1 = "hola"; // operador de asignación
__________________________________________________ __

Problema: ¿Como convertir un std::string en un char*?
Lenguaje: C++
Respuesta: Utilizando la función miembro: c_str():
Código:
string file_name = "mi_fichero.txt";
ifstream file( file_name.c_str() ); 
// el constructor de la clase ifstream no acepta un std::string
La función c_str() devuelve un const char*, entonces no se puede modificar directamente. Si quiere obtener un char* que se pueda modificar, hay que copiarlo en una variable suya:
Código:
#include <string>
#include <cstring>
#include <iostream>

string str = "una cadena de caracteres";
// crear un buffer para recibir la cadena
size_t size = str.size() + 1;
char * buffer = new char[ size ];
// copiar la cadena
strncpy( buffer, str.c_str(), size );
__________________________________________________ __

Problema: ¿Como convertir un número en un std::string?
Lenguaje: C++
Respuesta: Utilizando el objeto ostringstream:
Código:
#include <sstream>

std::ostringstream oss; // creamos un ostringstream
oss << 10; // los llenamos con un número; aquí es 10
// pero podria ser cualquier número, incluso un flotante
std::string result = oss.str(); // hacemos la conversión
__________________________________________________ __

Problema: ¿Como convertir un std::string en un número?
Lenguaje: C++
Respuesta: Utilizando el objeto istringstream:
Código:
#include <sstream>

std::istringstream iss( "10" );
int numero;
iss >> numero; // ahora numero = 10
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web

Última edición por r0d; 24/09/2010 a las 21:26
  #49 (permalink)  
Antiguo 01/03/2011, 16:39
 
Fecha de Ingreso: marzo-2011
Ubicación: caracas
Mensajes: 1
Antigüedad: 5 años, 10 meses
Puntos: 0
Respuesta: FAQs del lenguaje C y sus variantes

me gusto, excelente!!!!
  #50 (permalink)  
Antiguo 08/09/2011, 20:05
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 6 años, 3 meses
Puntos: 59
Pregunta: ¿Qué biblioteca puedo utilizar para crear interfaces gráficas de usuario (GUIs)?

Lenguaje: C/C++

Respuesta:
Bibliotecas multiplataforma :
Para Windows :

Última edición por _Adrian_; 20/10/2011 a las 14:35
  #51 (permalink)  
Antiguo 05/12/2011, 23:46
 
Fecha de Ingreso: junio-2011
Mensajes: 9
Antigüedad: 5 años, 7 meses
Puntos: 0
Respuesta: FAQs del lenguaje C y sus variantes

Una pequeña corrección para el código de @hgp147 ¿Cómo validar fechas? en el método
int cantDias(int mes, int bisiesto), en la comparación if cambiar mes==11 por mes==12

if(mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)

Noviembre tiene 30, diciembre 31 ;). Gracias por el código compañero.
  #52 (permalink)  
Antiguo 20/05/2012, 23:05
 
Fecha de Ingreso: mayo-2012
Mensajes: 2
Antigüedad: 4 años, 8 meses
Puntos: 0
Respuesta: FAQs del lenguaje C y sus variantes

Estimado.

Maravilloso FAQ, claro, didactivo y hasta motivador te diria, me dan ganas de aprender C++.
Saludos
  #53 (permalink)  
Antiguo 01/06/2012, 09:53
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 6 años, 9 meses
Puntos: 228
Respuesta: FAQs del lenguaje C y sus variantes

Problema: ¿Despues de un scanf(...) se saltea un gets o un getline ?
Lenguaje: C/C++
Respuesta: Esto ocurre porque al precionar enter para confirmar los datos del scanf en el buffer de escritura queda el caracter '\n' que es suministrado por el enter. Entonces cuando ponemos un gets o un getline se encuentra con ese caracter y automaticamente retorna una linea vacia.

Para solucionar este problema tenemos que limpiar el buffer de la siguiente manera:

Código C:
Ver original
  1. while (getchar() != '\n') ;

Esa instruccion consume el buffer hasta encontrar el caracter nueva linea, pero no lo deja en el buffer, lo elimina tambien.

Esto lo podemos meter dentro de una funcion:
Código C:
Ver original
  1. void Limpiar() {while (getchar() != '\n') ;}

O sino usar un macro:

Código C:
Ver original
  1. #define LIMPIAR while (getchar() != '\n') ;

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 29 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 02:56.