strlen( ) da erro ao compilar

1. strlen( ) da erro ao compilar

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/06/2016 - 11:27h

Galera criei um simples programa de testes para estudos em linguagem C, e estou compilando no Terminal do Ubuntu.
Segue o programa abaixo:
#include <stdio.h>
#include <string.h>

int main(void)
{
char titulo_livro[] = "Bíblia do programador C C++ do Jamsa!";

printf("%s contém %d caracteres",titulo_livro,strlen(titulo_livro));
return(0);
}

O objetivo do programa é exibir quantos caracteres tem a string, quando compilo pelo Codeblocks da tudo certo, mas quando compilo no terminal, da o erro dizendo que é preciso uma variavel do tipo int para %d. Só que a função strlen( ) ja atribui um valor inteiro a string, tanto é que pelo codeblocks da tudo certo. Pq não consigo compilar pelo terminal? Alguém me ajuda por favor?
Valew.


  


2. Re: strlen( ) da erro ao compilar

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/06/2016 - 15:02h

O tipo de retorno da função strlen() é size_t. size_t não é um tipo nativo da linguagem, mas é um tipo da biblioteca padrão destinado a determinar tamanhos de objetos na memória.

size_t é definido no cabeçalho <stddef.h> (que geralmente é automaticamente incluído como resultado da inclusão de outros cabeçalhos padrão, como <stdlib.h> ou <stdio.h>), geralmente através de um comando typedef. Como ele se destina a medir tamanhos de objetos na memória, seu valor nunca pode ser negativo, de modo que ele geralmente é equivalente a unsigned int, unsigned long ou unsigned long long, dependendo da arquitetura.

Mesmo sem ser um tipo nativo, size_t é tão importante que o resultado do operador sizeof devolve um dado do tipo size_t. Além disso, existe um modificador da formatação de printf(), aplicável aos conversores de dados de tipos inteiros (i.e. "%d", "%i", "%o", "%u", "%x" e "%X"), para indicar argumentos do tipo size_t. No caso do seu rograma, eis como ficaria a chamada a printf() para compilar sem erros.

printf("%s contém %zd caracteres",titulo_livro,strlen(titulo_livro));  // Note o “%zd”. 


Contudo, como você sabe que o valor de strlen() nunca será negativo (porque size_t mapeia para um tipo nativo que é sem sinal), melhor ainda seria usar “"%zu"”.

EM TEMPO: A mensagem que você recebeu ao compilar foi uma mensagem de aviso, não propriamente de erro. A compilação com o Code::Blocks deve (ou deveria) ter dado a mesma mensagem -- talvez tenha dado e você apenas não percebeu, até porque você pode ter sido ofuscado pela janela do programa rodando. Em qualquer caso, seja na linha de comando, seja num IDE, eu recomendo ligar as opções que tornam as mensagens de aviso em mensagens de erro. Isso obriga você a corrigir código que pode até ser que funcione na sua máquina, mas pode se tornar uma grava dor de cabeça se você levar o programa para uma máquina diferente. No caso do GCC, as opções que eu recomendo são “-Wall -Werror -O2 -pedantic”.


3. Re: strlen( ) da erro ao compilar

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/06/2016 - 18:06h

Obrigado pela dica






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts