Jump to content
Fórum Script Brasil
  • 0

Biblioteca string.h no Ubuntu


Question

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 to post
Share on other sites

9 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148888
    • Total Posts
      644906
×
×
  • Create New...