printf ((char *) i); Erro de tempo de execução? (Eu como inteiro)
-
21-09-2019 - |
Pergunta
Em um loop for, estou tentando usar o PrintF para imprimir o valor atual do i. Está linha: printf((char *) i);
está me dando erros de tempo de execução. Por que é isso?!
Abaixo está uma solução rápida do FizzBuzz que está fazendo isso:
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);
}
}
}
Solução
Porque não é assim printf
funciona. Você quer isso: em vez disso:
printf("%d\n", i);
Ou ainda melhor,
std::cout << i;
Outras dicas
Se você estiver usando C ++, use o cout em vez de printf:
#include <iostream>
using namespace std;
int main() {
int i = 42;
cout << "The answer is: " << i << endl;
}
Por essa afirmação, o que você está dizendo é: "Há uma picada começando no local I, exiba" certamente não é isso que você pretendia. Use formato string %d para imprimir um número inteiro
A maneira como o printf funciona é que é necessário uma string como esta:
printf( "the number is: " );
Se você deseja um número inteiro na última seção da string, você precisa usar um personagem de fuga e depois passar o INT como outro paramater:
printf( "the number is %d", i );
Há mais informações aqui nos caracteres de fuga que você pode usar.
Você também precisará incluir:
#include <stdio.h>
EDITAR
Desculpe, minha terminologia estava errada, % seguido de uma sequência é chamado de Especificação de conversão Não é um personagem de fuga.
Hth.
O primeiro argumento de printf()
é uma corda terminada em nulo no estilo C. É para ser usado como formato (assim o "f") com %
Formatando sequências para imprimir os argumentos restantes.
Usando printf((char *) i);
Você está instruindo o computador a imprimir todos os bytes começando no endereço que i
aponta, até que encontre um nulo. Infelizmente, dado isso i
Geralmente é usado para contadores, provavelmente aponta para uma memória muito baixa. A maioria dos sistemas operacionais modernos proíbe o acesso a essa memória de programas de espaço do usuário para impedir que os bugs criem orifícios de segurança e enviam sinais para programas ofensivos. A resposta padrão a esse sinal, a menos que você a prenda, é matar o processo.
Para exibir o número armazenado em i
, usar printf("%d\n", i);
. Para exibir o valor de i
Como personagem, tente putc((char)i);
ou printf("%c\n", i);
. Se i
Realmente é um ponteiro para um personagem, tente putc((char)(*i));
.