Como dissemos no artigo sobre a biblioteca string.h, o objetivo de re-fazermos essas funções é apenas como exercício.
Lá deixamos bem claro que essas tentativas de criar essas funções é somente didático, para saber como as coisas funcionam (por isso podem surgir várias soluções, como a do anônimo de cima), e sugerimos que cada um tente criar as suas funções do seu próprio jeito, e não copiar a implementação original.
Também deixamos bem claro que, na hora de usar em um programa de verdade, devemos usar as funções da biblioteca original, que obviamente são bem mais confiáveis.
Obrigado aos dois pela contribuição.
22 de março de 2013 às 18:42
Anônimo disse...
Se a *orig é copiada até antes do terminador nulo \0 , a string *dest não ficaria sem esse terminador?
ao meu ver, a função deveria ser como abaixo pra garantir que esse terminador também seja copiado pra *dest
char *strcpy(char *dest, char *orig) { int i;
for(i=0 ; i <= strlen(orig) ; i++) dest[i] = orig[i];
estou tentando usar essa strcpy, mas quando o ponteiro a aponta para outro ponteiro está dando erro. SEGUE ABAIXO A PARTE DO CÓDIGO EM QUE USO O STRCPY.
Oi, Como eu compilo isso? Precisa de int main()? Alguém ode me dar um exemplo?
21 de maio de 2019 às 03:57
strcpy: char *strcpy( char *dest, char *orig );
Fornecemos a string de origem e ela é copiada e armazenada na string de destino, não importando como era a string de destino anteriormente.
Baixe o conteúdo do site: Apostila de C
strcpy() - Como copiar uma string em outra, em C
Para isso, podemos usar a função strlen(), que retorna o número de caracteres da string.
Note que, os caracteres visíveis na string de origem, são de 0 até strlen(orig) -1
E o caractere de índice strlen(orig) é o caractere delimitador \0.
Por isso, vamos copiar o caractere da posição 0 até o da posição strlen(orig), pois a nossa string de destino tem que ter o caractere delimitador ao final.
6 Comentários
Fechar esta janela Ir para formulário de comentáriochar *strcpy(char *dest, char *orig)
{
while(orig)
{
dest = orig;
dest++;
orig++;
}
return dest;
}
19 de março de 2013 às 18:27
Utilize strncpy e cuidado com off by one. strNNNNNNNNNNcpy
[]s
20 de março de 2013 às 10:49
Olá,
Como dissemos no artigo sobre a biblioteca string.h, o objetivo de re-fazermos essas funções é apenas como exercício.
Lá deixamos bem claro que essas tentativas de criar essas funções é somente didático, para saber como as coisas funcionam (por isso podem surgir várias soluções, como a do anônimo de cima), e sugerimos que cada um tente criar as suas funções do seu próprio jeito, e não copiar a implementação original.
Também deixamos bem claro que, na hora de usar em um programa de verdade, devemos usar as funções da biblioteca original, que obviamente são bem mais confiáveis.
Obrigado aos dois pela contribuição.
22 de março de 2013 às 18:42
Se a *orig é copiada até antes do terminador nulo \0 , a string *dest não ficaria sem esse terminador?
ao meu ver, a função deveria ser como abaixo pra garantir que esse terminador também seja copiado pra
*dest
char *strcpy(char *dest, char *orig)
{
int i;
for(i=0 ; i <= strlen(orig) ; i++)
dest[i] = orig[i];
return dest;
}
10 de fevereiro de 2014 às 21:57
estou tentando usar essa strcpy, mas quando o ponteiro a aponta para outro ponteiro está dando erro. SEGUE ABAIXO A PARTE DO CÓDIGO EM QUE USO O STRCPY.
noLista* selectionSort(noLista *ini){
char nomeA[30];
noLista* aux = ini;//aux= ini
noLista* aux2, *tempo;
float tmp, min;
for(aux = ini; aux!=NULL; aux = aux->prox){
tempo = aux;
min = aux->nota;
exibe(ini);
for(aux2 = aux->prox; aux2!=NULL; aux2 = aux2->prox){
if( aux2->nota < min){
min = aux2->nota;
strcpy(nomeA, aux2->nome);
tempo = aux2;
}
}
if(aux->nota != min){
tmp = aux->nota;
printf("tmp nota %f\n", aux->nota);
strcpy(nomeA, aux->nome);
aux->nota = min;
strcpy(aux->nome, aux2->nome);
strcpy(aux2->nome, nomeA);
tempo->nota = tmp;
strcpy(tempo->nome, nomeA);
}
}
return ini;
}
A PARTE DO CÓDIGO QUE ESTÁ GERANDO O ERRO
4 de fevereiro de 2015 às 08:24
Oi,
Como eu compilo isso? Precisa de int main()? Alguém ode me dar um exemplo?
21 de maio de 2019 às 03:57