printf ((char *) i); ¿Error de tiempo de ejecución? (I como número entero)

StackOverflow https://stackoverflow.com/questions/1787604

  •  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);
        }
    }
}
¿Fue útil?

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));.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top