Problème lors de la réécriture de strncat
Bonjour,
j'ai une interro très prochaine en C , et donc j'ai décidé de refaire une des anciennes interro , histoire de bien gérer .. Seulement voilà cela fait plusieurs heures que je bloque sur la réécriture de strncat, où on ne peut pas faire d'allocation mémoire ...
D'abord j'ai fait tenté le coup avec un tableau de caractère , tout fonctionnait bien jusqu'à ce que je sois obligé de return mon tableau, ce qui est pas évident sans allocation mémoire ... Ensuite je suis donc allé voir sur internet le code de strncat:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #include <stddef.h> /* size_t */
char *strncat(char *dest, const char *src, size_t n)
{
char *ret = dest;
while (*dest)
dest++;
while (n--)
if (!(*dest++ = *src++))
return ret;
*dest = 0;
return ret;
} |
Je l'ai copié/collé, et visiblement ça ne fonctionne pas 8O De toute façon il est pas très parlant, donc j'ai décidé de le faire à ma sauce :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| char * strncat2013 (char* dest,const char * src, size_t count){
char *ret=dest;
while(*dest != 0) {
dest++;
}
while (count > 0) {
dest++;
*dest=*src;
src++;
if (*src ==0){
*dest=0;
return ret;
}
}
*dest=0;
return ret;
} |
Et la même erreur, ou plutôt pas d'erreur : ça s'execute, la fenêtre reste noire et j'ai juste un message : le programme a cessé de fonctionner !
j'ai essayé de voir d'où vient le problème (en mettant des printf un peu partout) , et visiblement c'est cet idiot de qui ne veut pas fonctionner, et qui fait tout planter !
Pourriez vous m'aider?
Merci :)
Voici mon code en entier :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#include <stdio.h>
#include <string.h>
#include <stddef.h>
char*strncat2013 (char* dest,const char * src, size_t count);
int main(void)
{
char * dest;
const char * src;
dest="truc";
src="chose";
strncat2013(dest, src, 10);
return 0;
}
char * strncat2013 (char* dest,const char * src, size_t count){
char *ret=dest;
while(*dest != 0) {
dest++;
}
while (count > 0) {
dest++;
*dest=*src;
src++;
if (*src ==0){
*dest=0;
return ret;
}
}
*dest=0;
return ret;
} |