Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Eric MGS

C String como parâmetro de sizeof ()

Recommended Posts

//Programa que imprime a memória utilizada por tipos de dados
#include <stdio.h>
  
void rotina (char texto[6]) {
    int tamanho = sizeof (texto);
    printf ("%s:\n",texto);
    printf ("Tamanho em bytes: %i\n\n",tamanho);
}

void main (void){
    rotina ("char");
    rotina ("int");
    rotina ("float");
}

Boa noite,

Estou querendo fazer um programa que imprima a quantidade de memória em bytes que cada tipo de dados ocupa (porque em máquinas diferentes os valores podem ser diferentes).

Inicialmente escrevi o código apenas com a função main, repetindo o printf para cada tipo de dado, da seguinte forma:

...

   printf ("Tamanho em bytes: %i \n", sizeof (char);

   printf ("Tamanho em bytes: %i \n", sizeof (int);

...

Deu certo,

Porém depois decidi tentar usar uma outra função para não precisar repetir o printf e fiz da maneira em que coloquei o código aqui.

O retorno que o programa está dando é sempre 4 bytes, ou seja, o tamanho de char texto[6].

Já percebi que o problema é que em sizeof (texto) o valor que está sendo devolvido é o tamanho da variável texto,

mas gostaria que no lugar de texto fosse inserido o conteúdo da variável, ou seja, as strings "char", "int" , "float" , para que fosse retornado o tamanho de cada tipo de dado respectivo.

Tentei escrever no lugar de sizeof (texto) assim:

sizeof ("%s",texto);

Porém não deu certo.

Gostaria de saber se existe alguma maneira de que no parâmetro de sizeof fosse inserido o conteúdo da variável (string) e não a própria variável.

Agradeço se alguém souber responder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Eric MGS Em uma string só há char's(caracteres) relacionado a um decimal da tabela ascii, portanto sizeof(char) tem a mesma quantidade de bytes que sizeof(int)

 

Para ter os bytes de cada tipo, da string, você precisa separar esses valores, seja com scanf, etc, armazenar em uma variável temporária e depois usar sizeof

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, TYSQUARE89 disse:

@Eric MGS Em uma string só há char's(caracteres) relacionado a um decimal da tabela ascii, portanto sizeof(char) tem a mesma quantidade de bytes que sizeof(int)

 

Para ter os bytes de cada tipo, da string, você precisa separar esses valores, seja com scanf, etc, armazenar em uma variável temporária e depois usar sizeof

 

Você quis dizer pra fazer algo assim?

Continua dando errado.

void main (void){
    char temp[5];
    scanf("%s",temp);
    int tamanho = sizeof (temp);
    printf("Tamanho: %i", tamanho);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode dar um exemplo? Não entendi o que você disse que tem que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Eric MGS Vamos supor que você escreva na entrada:

 

João recebeu 1 salário de 4.300,35 em 3.0 dias.

 

Essa entrada é 'armazenada' em uma string.

Porém você quer separar todos elementos, identificar seu tipo e então verificar com sizeof.

 

Portanto é preciso separar, mas antes temos que identificar cada coisa, exemlpo:

 

Joao         - string 

recebeu    - string 

1                - int

salário      - string

de              - string

4.300,35   - float

em             - string

3.0             - int / float

dias           - string

 

Para identificar é preciso criar um algorítimo ou usar strtok, para separar, assim depois de separar cada palavra, é preciso verificar se tal char é um numero, e encontrar seu fim. Ao encontrar o fim do número é preciso manter ele em um buffer e usar atoi, atol, etc.Exemplo:

 

 

mensagem[100] = "João recebeu 1 salário de 4.300,35 em 3.0 dias"

 

mensagem[0][ ]  == isalpha ?

true

 -> nova string Palavra -> encontrar final

 

false

 -> verificar se é numero -> encontrar final

 

é só você encontrar uma forma de separar os elementos e identificar o tipo

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, resolvi deixar do jeito que estava antes, com algumas linhas a mais. Como sou iniciante logo eu aprendo novas funções e volto a tentar, se não vou acabar confundindo tudo.

Valeu aí pela ajuda.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×