1 – 2 de 2
Anônimo Anônimo disse...

Olá, bem eu tenho uma pergunta(é bem provável que seja uma pergunta idiota) mas vamos lá; por que no código acima não foi colocado o caractere delimitador "\0'.

30 de abril de 2015 às 15:11

Blogger DNRCleber disse...

Sem o '\n` minha função estava a imprimir o restante dos caracteres como símbolos.
Estou usando o compilador "Móvel c" no Android. Segue meu código.
#include
#include
#include
#define MAX 30

int _strlen(char * str);
char *_strcpy(char * dest, char * orig);
char *_memcpy(char * dest, char * orig, int);
void LimparLixo();

int main()
{
int op, p, qtd;
char *palavra[MAX], *destino[MAX];

do
{
printf("1: strlen()\n");
printf("2: strcpy()\n");
printf("3: memcpy()\n");
scanf("%d",&op);

system("cls");
switch(op)
{
case 1:
printf("strlen()\n");//conta caracteres de uma string
//LimparLixo();//tentei e deu certo antes de usar a funcao switch,,case
//fgets(palavra, sizeof(palavra) -1, stdin);//conta tambem o buffer \n do teclado
gets(palavra);
//fflush(stdin);//nao funciona com funcao fgets()
p = _strlen(palavra);
printf("Tamanho = %d", p);
break;

case 2:
printf("strcpy()\n");//copia uma string de uma variavel para outra
fgets(palavra, sizeof(palavra), stdin);
_strcpy(destino, palavra);
//printf("Palavra [%s]", destino); // junto da funcao fgets, contabilliza o buffer '\n'
puts(destino);
//fflush(stdin);
break;

case 3:
printf("memcpy()\n");//copia quantidade de caracteres de uma string para a variavel destino
//printf("Quantos caracteres copiar?\t");
//fgets(palavra, sizeof(palavra), stdin);
gets(palavra);
//scanf("%f", palavra);
qtd = 3;
//scanf("%d", &qtd);
_memcpy(destino, palavra, qtd);
printf("Palavra [%s]", destino);
//puts(destino);
break;

default:
printf("Erro, digite 'sair'");

}
}while(op == 'sair');
return 0;
}

int _strlen(char * str)
{
int cont = 0;
while(str[cont] != '\0')
cont++;
return cont;
}

char *_strcpy(char * dest, char * orig)
{
int i;
for(i = 0 ; i < _strlen(orig) ; i++ )
dest[i] = orig[i];
dest[i] = '\0';
return dest;
}

char *_memcpy(char * dest, char * orig, int n)
{
int i;
for(i = 0; i < n ; i++)
dest[i] = orig[i];

dest[i] = '\0';// estava a imprimir o restante dos caracteres restantes como simbolos
return dest;
}

void LimparLixo()
{
int ch;
do
{
ch = getchar();
}while(ch != EOF && ch != '\n');
clearerr(stdin);
}

1 de junho de 2018 às 19:09

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.
Você pode usar algumas tags HTML, como <b>, <i>, <a>

A moderação de comentários foi ativada. Todos os comentários devem ser aprovados pelo autor do blog.

Depois de enviar seu comentário, será necessário fazer login.
Prove que você não é um robô