Ir ao conteúdo
  • Cadastre-se

C String como parâmetro de sizeof ()


Eric MGS

Posts recomendados

//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.

Link para o comentário
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

Link para o comentário
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);
}

 

Link para o comentário
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

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!