Ir para o conteúdo
msmsms

printf erro com strings

Mensagens Recomendadas

msmsms

eu estou a experimentar fazer printf com strings e dá erro

se for com valor já consigo compilar sem erro

#include <stdio.h>
#include <stdlib.h>
int main()
{
char nome = "blablabla";
printf("nome: %s", nome);
}

o que tenho de errado no meu programa para imprimir um nome?

estou a usar o ubuntu 12

se eu fizer

#include <stdio.h>
#include <stdlib.h>
int main()
{
   char idade = 10;
   printf("idade: %d", idade);
}

desta forma tudo corre bem

Editado por msmsms

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

char é um tipo de dados que define um valor numérico de 1 byte (8 bits) de pode guardar um valor de -128 a 127

o que tu queres é guardar o valor da posição de memória (referência) que indica uma lista de valores descrito acima:

char * nome = "blablabla";


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Uma alternativa à sugestão do Hippo é definir um array de caracteres para a string

char nome1[] = "blablabla"; /* nome1 é um array com 10 elementos */
char nome2[10] = "blablabla"; /* também tem 10 elementos */
char nome3[11] = "blablabla"; /* 11 elementos: os 2 ultimos elementos tem o mesmo valor */
char nome4[9] = "blablabla"; /* código que não gera uma string: nome4 não tem espaço para o '\0' */
char nome5[8] = "blablabla"; /* codigo invalido: a string original é maior que o espaço de nome5 */

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
msmsms

char é um tipo de dados que define um valor numérico de 1 byte (8 bits) de pode guardar um valor de -128 a 127

o que tu queres é guardar o valor da posição de memória (referência) que indica uma lista de valores descrito acima:

char * nome = "blablabla";

obrigado pela resposta cientifica

o que eu precisava mesmo nesta fase era de saber que tenho de usar o (*) não me vou esquecer mais

deu certo com o (*)

;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
msmsms

voltei a fazer uma nova experiência

pedindo o nome através de um scanf e obtenho o mesmo erro

#include <stdio.h>
#include <stdlib.h>
int main()
{
   char *nome;
   printf("nome =");
   scanf("%s", &nome);
   printf("%s", nome);
}

como resolvo?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

isso é um assunto um pouco complexo, mas vamos lá ver se consigo ser claro

quando tens o seguinte código:

char * frase = "a frase existe";

isto quer dizer que a frase "a frase existe", existe em memória. é alocada e escrita pela aplicação no momento que é executada. é por isso que se chama de string estática.

o que estás a fazer, é na realidade a guardar na variável frase, essa posição de memória.

no código que agora apresentas, não é isso que estás a fazer. estás somente a declarar uma variável que aponta para uma posição de memória em que os dados serão interpretados como char's. nem sequer estás a inicializar o seu valor.

por outras palavras, não existe local definido de memória onde guardar a string que irás ler do teclado.

espero que tenha sido claro no mínimo número de palavras


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.