Ton problème vient du &chemin[25]. Les fonctions travaillant sur des chaînes prennent l'adresse du premier octet, pas du dernier (contrairement aux symstr). Du coup au lieu d'écrire dans le buffer chemin, tu écris après, et donc tu écrases plein d'informations importantes (en l'occurence tu écrases l'adresse de retour du main dans la pile).
Sinon, 2-3 détails :
- remplace printf("%s", x) par puts(x) ça fait pareil mais beaucoup plus vite.
- tu peux travailler directement sur tes paramètres dans la fonction, ça évite de faire 18 copies.
- quand tu ne modifies pas un paramètre (je pense au char* name), marque const devant. Ca permet au compilateur de faire certaines optimisations, et à toi de voir immédiatement si tu le modifies par mégarde (le compilateur va raler).
- Un tableau temporaire pas trop gros et de taille fixe tu peux le créer directement sans t'embèter avec calloc et free.
ngetchx();
}
Teste avec ça ?short chevar(const char *name, char *chemin)
{
char var;
char dos;
char chem[25];
SYM_ENTRY * entry;
entry = SymFindFirst(0, FO_RECURSE);
while(entry)
{
if(strncmp(name, entry->name, 8) == 0)
break;
entry = SymFindNext();
}
if (!entry) return 0;
strcpy(chemin, SymFindFolderName());
strcat(chemin,"\");
strncat(chemin, entry->name, 8);
return 1;
}
void _main(void)
{
char chemin[25];
clrscr();
if (chevar("bateaux", chemin) != 0)
puts(chemin);