Ir para conteúdo
Fórum Script Brasil
  • 0

Biblioteca string.h no Ubuntu


brunobraziel

Pergunta

Boa noite.

Ao tentar compilar um arquivo básico, aonde devo transformar toda a frase em maiúscula e depois em minúscula, aparece-me o seguinte erro: 

L03EX03.c: In function ‘main’:
L03EX03.c:14:2: warning: implicit declaration of function ‘strupr’ [-Wimplicit-function-declaration]
  strupr(frase);
  ^
L03EX03.c:16:37: warning: implicit declaration of function ‘strlwr’ [-Wimplicit-function-declaration]
  printf("\nFRASE EM MINUSCULO: %s", strlwr(frase));
                                     ^
L03EX03.c:16:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
  printf("\nFRASE EM MINUSCULO: %s", strlwr(frase));
         ^
/tmp/cci4xclh.o: na função `main':
L03EX03.c:(.text+0x54): referência indefinida para `strupr'
L03EX03.c:(.text+0x81): referência indefinida para `strlwr'
collect2: error: ld returned 1 exit status

o código que eu fiz foi:

#include <stdio.h>
#include <string.h>
#define MAX 200

int main () {
	char frase[MAX];
	
	printf("Digite uma frase: ");
	fgets(frase, MAX, stdin);
	
	strupr(frase);
	printf("\nFRASE EM MAIUSCULO: %s", frase);
	printf("\nFRASE EM MINUSCULO: %s", strlwr(frase));
	}

Eu queria saber se o problema está no compilador (já que eu também não consegui utilizar o 'gets' em outro exercício) ou se é algum erro do código.

Obrigado.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
4 minutos atrás, vangodp disse:

#include <ctype.h> //c
#include <cctype> //c++

ainda assim dá erro.
 

L03EX04.c: In function ‘main’:
L03EX04.c:17:5: warning: implicit declaration of function ‘stricmp’ [-Wimplicit-function-declaration]
  if(stricmp(nome1, nome2) == 1)
     ^
/tmp/ccwr6L2C.o: na função `main':
L03EX04.c:(.text+0x79): referência indefinida para `stricmp'
collect2: error: ld returned 1 exit status

 

Link para o comentário
Compartilhar em outros sites

  • 0

na verdade, esse foi o log de um outro exercício, acabei dando Ctrl V errado. este é o certo:

L03EX03.c: In function ‘main’:
L03EX03.c:16:2: warning: implicit declaration of function ‘strupr’ [-Wimplicit-function-declaration]
  strupr(frase);
  ^
L03EX03.c:18:37: warning: implicit declaration of function ‘strlwr’ [-Wimplicit-function-declaration]
  printf("\nFRASE EM MINUSCULO: %s", strlwr(frase));
                                     ^
L03EX03.c:18:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
  printf("\nFRASE EM MINUSCULO: %s", strlwr(frase));
         ^
/tmp/ccyNT7YB.o: na função `main':
L03EX03.c:(.text+0x54): referência indefinida para `strupr'
L03EX03.c:(.text+0x81): referência indefinida para `strlwr'
collect2: error: ld returned 1 exit status

 

Link para o comentário
Compartilhar em outros sites

  • 0

Sempre recomendo você utilizar essa pagina: cplusplus.com

Cplusplus.jpg

No painel da esquerda na parte de cima você encontra a biblioteca, debaixo as funções que pertencem a ela, e na direita acima você tem a biblioteca que teria que usar, nesse caso seria para cpp, pois a pagina é uma referencia para o programador de C++, mas você pode ver a versão de C que sempre está a esquerda abaixo, retira o C de adiante de cctype e fica ctype.h. Outro ponto importante é que você tem sempre informação dos parâmetros que recebe e que retorna, essa pagina é a que todo programador usa al menos 300 vezes ao dia. >_<

afoo.jpg

Não sei o que te dizer...

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu, cara! Me ajudou pra caramba. Mas mesmo assim, eu ainda não consigo encontrar o erro no meu código. Não encontrei as funções strlwr nem strupr. As que encontrei na biblioteca ctype.h e que fazem a troca de caracteres de maiúsculo para minúsculo parece que só trocam caractere por caractere. 

Realmente não sei se o problema está na biblioteca string do meu notebook ou se é algum erro de digitação. 

Link para o comentário
Compartilhar em outros sites

  • 0

Isso é a causa que tanto strlwr como strupr não formam parte do C padrão, não estão contidas em nenuma biblioteca ao menos as padrões, isso não quer dizer que você não possa implementar sua proprias funçoes utilizando as anteriores:

Exemplo:
 

#include <string.h>
#include<ctype.h>

char *strlwr(char *str)
{
  unsigned char *p = (unsigned char *)str;

  while (*p) {
     *p = tolower(*p);
      p++;
  }

  return str;
}

Extraido de: http://stackoverflow.com/questions/23618316/undefined-reference-to-strlwr

C++ sim incorpora esse tipo de funções, C++ é como uma navalha Suiça. >_< 

Link para o comentário
Compartilhar em outros sites

  • 0

Acho engraçado que no compilador que tenho instalado sim tem a função... trata-se do mingw-w64 que contem gcc5.3.0, tente atualizar seu gcc a ultima versão e veja si te funciona. Claramente dice que está desaconselhado seu uso.

Captura.JPG

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...