Problemas ao prencher string com laço for em C [RESOLVIDO]

1. Problemas ao prencher string com laço for em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/11/2018 - 10:14h

Olá, recetemente andei fazendo uns testes com strings em C e acabei me deparando com um problema esquisito. O problema....estou com preguiça de descrever (- É SERIO ISSO?), então só vou deixar o código abaixo para vocês examinarem e darem o veredito.

Eis o código:

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

void get_string(char *__string, size_t max){

fgets(__string, max, stdin);

size_t len=strlen(__string);

if(__string[len-1]=='\n'){

__string[len-1]='\0'; //Tira a quebra de linha (o '\n').
}
}

int main(void){

char secret_word[56];

printf("\n[?] secret_word >");
get_string(secret_word, 56);

size_t wordlen=strlen(secret_word);

char secret[wordlen+1];

printf("\n\n[I] secret_word.........: %s\n", secret_word);
printf("[I] secret_word lenght..: %ld\n\n", wordlen);

for(size_t i=0; i<wordlen; i++){

if(secret_word[i]!=' '){

secret[i]='-';

}else{

secret[i]=' ';
}
}

secret[wordlen+1]='\0';

printf("[I] secret..........: %s\n", secret);
printf("[I] secret lenght...: %ld\n\n", strlen(secret));

return 0;
}




zherkezhi@zherkezhi-Lenovo-B40-30:~/Documents$ ./app

[?] secret_word >abacaxi


[I] secret_word.........: abacaxi
[I] secret_word lenght..: 7

[I] secret..........: -------
[I] secret lenght...: 7

Até aqui beleza!


zherkezhi@zherkezhi-Lenovo-B40-30:~/Documents$ ./app

[?] secret_word >macaco


[I] secret_word.........: macaco
[I] secret_word lenght..: 6

[I] secret..........: ------
[I] secret lenght...: 6

Até aqui beleza de NOVO!


zherkezhi@zherkezhi-Lenovo-B40-30:~/Documents$ ./app

[?] secret_word >azeitona


[I] secret_word.........: azeitona
[I] secret_word lenght..: 8

[I] secret..........: --------4
[I] secret lenght...: 9


UAI! achei que AZEITONA tinha 8 letras *_*

zherkezhi@zherkezhi-Lenovo-B40-30:~/Documents$ ./app

[?] secret_word >ilha da macacada


[I] secret_word.........: ilha da macacada
[I] secret_word lenght..: 16

[I] secret..........: ---- -- --------&#65533;
[I] secret lenght...: 17


Dá onde saiu aquele último caracter? Nem era para estar ali!

Onde está o problema? O QUE DIABOS FIZ DE ERRADO ;( ?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/11/2018 - 11:33h

zherkezhi escreveu:

Olá, recetemente andei fazendo uns testes com strings em C e acabei me deparando com um problema esquisito. O problema....estou com preguiça de descrever (- É SERIO ISSO?), então só vou deixar o código abaixo para vocês examinarem e darem o veredito.

Eis o código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void get_string(char *__string, size_t max){

fgets(__string, max, stdin);


Considere a possibilidade de fgets() falhar. Se ela falhar, o código abaixo pode ser perigoso, pois você não sabe com que conteúdo __string vai ficar.

O certo seria você fazer algo como o seguinte.
	if(fgets(__string, max, stdin)){
/* Código se a leitura for bem sucedida. */
}
else {
/* Código se a leitura tiver dado erro. */
}


Considere também a possibilidade de fazer sua função retornar um valor que indique se ela conseguiu ler alguma coisa ou não, a fim de que que a chamar possa decidir como proceder em caso de erro.


size_t len=strlen(__string);

if(__string[len-1]=='\n'){

__string[len-1]='\0'; //Tira a quebra de linha (o '\n').
}
}

int main(void){

char secret_word[56];

printf("\n[?] secret_word >");
get_string(secret_word, 56);

size_t wordlen=strlen(secret_word);

char secret[wordlen+1];

printf("\n\n[I] secret_word.........: %s\n", secret_word);
printf("[I] secret_word lenght..: %ld\n\n", wordlen);

for(size_t i=0; i<wordlen; i++){

if(secret_word[i]!=' '){

secret[i]='-';

}else{

secret[i]=' ';
}
}

secret[wordlen+1]='\0';


Por que esse “+1”? Se você declarou com tamanho N, os índices vão de 0 a N-1.


printf("[I] secret..........: %s\n", secret);
printf("[I] secret lenght...: %ld\n\n", strlen(secret));

return 0;
}


3. Re: Problemas ao prencher string com laço for em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/11/2018 - 15:51h

@Paulo - Put4 retardado mental que eu sou!
Valeu ai Paulo! Mal posso acreditar que errei por causa de algo tão básico.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts