Biblioteca string.h - problema

1. Biblioteca string.h - problema

Diego Guimaraes
DiegaoTKF

(usa Ubuntu)

Enviado em 05/12/2008 - 12:25h

opa..
seguinte... estava compilando um programa em C , q usava a biblioteca string.h, e estava manipulando as funcoes strcmpi, stricmp..etc..

aí foi quando deu erro de "undeclared implicit", algo do tipo. E com isso resolvi copiar a string.h do dev-cpp q uso no windows.. ae bugou tudo de vez..

entao se alguem tiver como disponibilizar um link pra eu baixar a string.h pro linux (ubuntu), ou entao disponibilizar o codigo dela como resposta eu agradeço.

vlw!


  


2. Re: Biblioteca string.h - problema

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 05/12/2008 - 13:26h

a solução mais "clean" para reverter a coisa seria reinstalar a glibc, mas como é uma operação que por vezes pode acabar piorando a situação, alternativamente você pode contornar de outras maneiras sem precisar mexer em nada além da própria header:
- extrair string.h do pacote .deb correspondente (admitindo que use o ubuntu)
ou
- baixar o arquivo do trunk cvs da glibc:
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/include/string.h?cvsroot=glibc

caso prefira esse último método, provavelmente não haverá problema pelo fato da header estar mais atualizada que a original que você tinha aí antes, até porque string.h não costuma sofrer modificações radicais (a menos que você tenha alguma versão mais antiga, mas creio que não).
tente aí e poste o resultado


3. Re: Biblioteca string.h - problema

Diego Guimaraes
DiegaoTKF

(usa Ubuntu)

Enviado em 05/12/2008 - 18:39h

AE.. fiz o download e coloquei na pasta /usr/include, a string.h q vc sugeriu... mas continuou dando muitos erros
como esse trecho q copiei:

In file included from string.c:2:
/usr/include/string.h:49:27: error: string/string.h: Arquivo ou diretório inexistente
In file included from string.c:2:
/usr/include/string.h:51: error: ‘strcoll_l’ undeclared here (not in a function)
/usr/include/string.h:52: error: ‘strxfrm_l’ undeclared here (not in a function)
/usr/include/string.h:53: error: ‘strcasecmp_l’ undeclared here (not in a function)
/usr/include/string.h:54: error: ‘strncasecmp_l’ undeclared here (not in a function)
/usr/include/string.h: In function ‘libc_hidden_proto’:
/usr/include/string.h:69: error: expected declaration specifiers before ‘libc_hidden_proto’
/usr/include/string.h:85: error: expected declaration specifiers before ‘libc_hi



mslomp:
como seria esse passo q vc falou:
" a solução mais "clean" para reverter a coisa seria reinstalar a glibc, mas como é uma operação que por vezes pode acabar piorando a situação, alternativamente você pode contornar de outras maneiras sem precisar mexer em nada além da própria header:
- extrair string.h do pacote .deb correspondente (admitindo que use o ubuntu) "

vlw aee..


4. Re: Biblioteca string.h - problema

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 05/12/2008 - 22:14h

olhando o erro ali onde diz:
/usr/include/string.h:49:27: error: string/string.h:

dá a entender que você talvez não tenha instalado as headers para trabalhar com a glibc (que é a biblioteca C padrão onde inclusive as funções string estão implementadas).
nesse caso:
# apt-get install glibc-dev

caso você já a tenha instalada e o problema persista, por favor poste o trecho do código onde está dando erro, incluindo as linhas de include.

quanto a reinstalar as headers da glibc (caso já estejam pré-instaladas):
# apt-get install --reinstall glibc-dev

isto deverá reinstalar todas as headers e demais componentes para o uso da glibc.
eu me referi a ser algo "mais clean" pois assim você garantirá que toda sua estrutura de headers voltará ao normal conforme o original, evitando misturar com novas versões de arquivos que podem (ou não) dar problema. e um probleminha qualquer com a glibc, por mais simples q seja, pode causar uma grande dor de cabeça.
alternativamente, se o caso for de apenas "resgatar" string.h, você poderia abrir o pacote .deb glibc-dev no programa de manipulação de arquivos compactados de sua preferência, procurar por ela e apenas extraí-la.
porém, creio que você não possua as headers instaladas. desse modo, tente apenas o install ali de cima, e qualquer coisa poste aí.


5. Re: Biblioteca string.h - problema

Diego Guimaraes
DiegaoTKF

(usa Ubuntu)

Enviado em 05/12/2008 - 23:11h

Consegui...

vlw ae.. resinatlei o pacote certo e agora voltou a funcionar...
no caso do unbunto o correspondente a glibc é o libc6 ...
por isso quebrei cabeça pra axar e nada...

agora..uma deixa, so pra aproveitar o topico..

como sou novo no linux.. tava fazendo uns testes.. e nao tah lendo mais de um scanf seguido... lê um e salta o resto(mesmo colocanfo fflush(stdin) depois de cada um).
tem algum detalhe a mais q pra programas no windows n precisava?!
tanto compilando pelo "Geanny" como pelo terminal acontece o mesmo.


vlw


6. Re: Biblioteca string.h - problema

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 06/12/2008 - 12:28h

cara, se for possível, poste o seu código, fica mais fácil ver o que pode estar ocorrendo


7. Re: Biblioteca string.h - problema

Diego Guimaraes
DiegaoTKF

(usa Ubuntu)

Enviado em 06/12/2008 - 14:33h

blz..
é um programa bem basico..

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct{
char nome[30],endereco[30];
int idade;
}cadastro;

int main ()
{
cadastro *c;
printf("Forneca o nome:");
scanf("%s",c->nome);fflush(stdin);//scanf("%29[^\n]",c->nome);
printf("\nForneca a idade:");
scanf("%d",&c->idade);fflush(stdin);
printf("\nForneca o endereco:");
scanf("%s",c->endereco);fflush(stdin);//scanf("%29[^\n]",c->endereco);

printf("\n====Confirmacao===\n");

printf("Nome = %s",c->nome);
printf("\nEndereco = %s ",c->endereco);
printf("\nIdade = %d ",c->idade);

return 0;
}



8. Re: Biblioteca string.h - problema

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 07/12/2008 - 11:23h

a questão aqui é que você tem um ponteiro para a sua estrutura, e assim cada referência a um de seus membros acaba sendo uma indireção para um ponteiro, causando a confusão no scanf, que é uma função bastante rígida quanto a isso. há 2 modos de contornar o problema: um seria fazer a derreferência do ponteiro para a estrutura em cada chamada scanf, mas isso deixa seu código confuso e obscuro, e isso torna as coisas ainda piores para quem está estudando a linguagem e ponteiros. o método mais limpo que eu sugiro é evitar alocar ponteiro para a estrutura. segue o main() com essa abordagem:

int main ()
{
cadastro c;
printf("Forneca o nome:");
scanf("%s",c.nome);
printf("\nForneca a idade:");
scanf("%d",&c.idade); // observe que aqui temos o &
printf("\nForneca o endereco:");
scanf("%s",c.endereco);

printf("\n====Confirmacao===\n");

printf("Nome = %s",c.nome);
printf("\nEndereco = %s ",c.endereco);
printf("\nIdade = %d ",c.idade);

return 0;
}

ps: nesse momento eu estou num pc sem compilador algum, menos ainda o gcc, então não testei o código. mas creio que deva rodar tranqüilo. faça um teste aí e qualquer coisa poste o resultado.


9. Re: Biblioteca string.h - problema

Diego Guimaraes
DiegaoTKF

(usa Ubuntu)

Enviado em 07/12/2008 - 12:21h

vlw veio..
deu certinho agora...
=]


10. Re: Biblioteca string.h - problema

Tiago
qtcreator

(usa Ubuntu)

Enviado em 02/11/2012 - 00:56h

Eu estou com um problema parecido. Estou tentando compilar um programa no qt creator que usa o comando 'strlwr' da biblioteca 'string.h' só que apresenta o seguinte erro:
'strlwr' was not declared in this scope

Vocês poderiam a me ajudar a resolver esse problema no ubuntu.

Obs.: Estou usando ubuntu 12.04. Esse mesmo programa roda no pc de uma amiga que usa windows. Sou novo com linux, mas tenho gostado muito, por isso venho procurar solução para que eu possa continuar a programar usando sempre linux.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts