printf ((char *) i); ¿Error de tiempo de ejecución? (I como número entero)
-
21-09-2019 - |
Pregunta
En un bucle, estoy tratando de usar printf para imprimir el valor de la corriente i. Esta línea: printf((char *) i);
me está dando tiempo de ejecución errores. ¿Por qué es esto?!
A continuación se muestra una solución rápida FizzBuzz que está haciendo esto:
void FizzBuzz()
{
for (int i = 0; i < 20; i++)
{
printf((char *)i);
if ((i % 3 == 0) && (i % 5 == 0))
{
printf("FizzBuzz \n");
}
else if (i % 3 == 0)
{
printf("Fizz \n");
}
else if (i % 5 == 0)
{
printf("Buzz \n");
}
else
{
printf("%d\n", i);
}
}
}
Solución
Debido a que no es como funciona la printf
. Desea que esta vez:
printf("%d\n", i);
O mejor aún,
std::cout << i;
Otros consejos
Si está utilizando C ++, debe utilizar cout en lugar de printf:
#include <iostream>
using namespace std;
int main() {
int i = 42;
cout << "The answer is: " << i << endl;
}
Por esa declaración lo que está diciendo es: "hay una picadura empieza en la ubicación i, exhibo" Seguramente eso no es lo que pretende. Usar el formato de cadena% d para imprimir un número entero
La forma en que funciona printf es que se necesita una cadena como esta:
printf( "the number is: " );
Si a continuación desea un entero en el último tramo de la cadena es necesario utilizar un carácter de escape y luego pasar el int como otro parámetro de:
printf( "the number is %d", i );
Hay más información aquí en los caracteres de escape que puede utilizar.
También deberá incluir:
#include <stdio.h>
Editar
Lo sentimos mi terminología estaba mal,% seguido de una secuencia se llama un conversión especificación no un characer escape.
HTH.
El primer argumento de printf()
es una cadena terminada en cero al estilo C. Está destinado a ser utilizado como un formato (por lo tanto la "f") con %
formatear secuencias para imprimir el resto de argumentos.
Mediante el uso de printf((char *) i);
que están dando instrucciones al ordenador para imprimir cada byte empezando en la dirección que apunta a i
, hasta que encuentra un valor nulo. Desafortunadamente, dado que i
se utiliza generalmente para los contadores, es probable que apunta a muy poca memoria. La mayoría de los sistemas operativos modernos prohíben el acceso a dicha memoria de los programas de espacio de usuario para prevenir errores de creación de agujeros de seguridad, y enviarán señales a los programas ofensivos. La respuesta predeterminada a una señal de este tipo, a menos que atraparlo, es matar el proceso.
Para visualizar el lugar número almacenado en i
, el uso printf("%d\n", i);
. Para mostrar el valor de i
como un personaje, o tratar putc((char)i);
printf("%c\n", i);
. Si i
realmente es un puntero a un carácter, tratar putc((char)(*i));
.