J'ai essayé d'écrire un programme qui copie le premier k char d'une chaîne s1, puis concatène le résultat avec le reste de la chaîne s2 à partir d'une position i puis concatène le reste de s1 le résultat. Pourtant, j'ai eu quelques problèmes avec strncpy
. Il montre des caractères étranges dans la console comme @.strncpy et Strcat Garbage caractères dans C
Voici mon code:
char* strninsert(char *s1, char *s2, int k,int i)
{
int n=strlen(s1)+strlen(s2)+10; // if i put for exemple 1000 it works
char *result=(char*)malloc(n*sizeof(char));
result[0]='\0';
strncpy(result,s1,k);
strcat(result,(s2+i));
strcat(result,(s1+k));
puts(result);
return(result);
}
int main()
{
int lens;
printf("size string 1 ");
scanf("%d",&lens);
char *s=(char*)malloc((lens+1)*sizeof(char));
getchar();
fgets(s,lens+1,stdin);
int lenx;
printf("enter size string 2 ");
getchar();
scanf("%d",&lenx);
char *x=(char*)malloc((lenx+1)*sizeof(char));
getchar();
fgets(x,lenx+1,stdin);
int lentemp=lenx+lens;
char *temp=(char*)malloc((lentemp+1)*sizeof(char));
temp=strninsert(s,x,2,3);
puts(temp);
return(0);
}
Il me montre des personnages étranges après l'instruction strncpy
comme par exemple [email protected]<line
.
[page man strncpy dit] (http://linux.die.net/man/3/strncpy) : "Attention: s'il n'y a pas d'octet nul parmi les n premiers octets de src, la chaîne placée dans dest n'aura pas de caractère nul". C'est-à-dire que si la valeur 'k' dans votre code est inférieure à' strlen (s1) + 1' alors le contenu résultant dans 'result' ne sera pas terminé par NUL. – kaylum
Il y a beaucoup de problèmes avec ce code, tels que les fuites de mémoire, le résultat de 'malloc' (c'est une maladie), et la mauvaise mise en forme. Quel est le but des variables 'k' et' i'? Parce qu'ils sont la cause principale de ce problème. – szczurcio
arrête d'utiliser 'strncpy'. Utilisez 'snprintf' à la place –