Forum Clubic

Programme de concatenation - en C , un peut d'aide svp!

bonjour a toute et a tous ,
je suis entrain de tapper un programme en C qui concatene au maximum n caractere d’une chaine T sutr une chaine S.

seulement les resultat que j’obtient sont faux et le compilateur me renvoie toujours le meme avertissement “pas de retour chariot a la fin du fichier”

quand j’execute et que j’essais de concatener par exemple 2 caracter de la chaine “azer” avec la chaine “azerty” , normaleent ca devrait m’afficher “azertyaz” or la ca me marque

azerty
az?D

il y donc un probleme , est ce ue vous pourriez y jeter un coup d’oeil , mon programme est la : ici

merci d’avance!

utilise la fonction strcat :

http://www.elook.org/programming/c/strcat.html

http://nicolasj.developpez.com/articles/libc/string/#LII-C

Pour le retour chariot, c’est simple : ajoute un saut de ligne en fin de fichier.

Cadeau : (par contre les fautes d’orthographes sont légions)

void strncat(char* s, char* t, int n) {
  while (*s != '\0' ) ++s;
  for (unsigned int i = 0; i < n && *t != '\0'; ++i, ++t, ++s) {
    *s = *t;
  }  
  *s = '\0';
}

Je n’ai pas testé, et ce n’est pas safe (tu peux facilement taper en dehors de la zone allouée à s)

Par contre : ne jamais JAMAIS mettre une taille dans un tableau passé en paramètre à une fonction (comme tu fais). Cela veut dire que tu va créer un tableau 1000 caractères plutôt que passer un pointeur vers un tableau.

gcolmar, dans ta fonction strncat, quand tu parcours la String S pour en trouver la fin, tu fais une comparaison avec ‘\0’.
Or, fgets te retourne une chaine terminee pas new-line (’\n’) et non pas null-terminated (’\0’).

Tu peux citer tes sources ?

Les sources : http://www.linux-kheops.com/doc/man/manfr/…gets.3.txt.html

(tout le monde sait ça voyons :D)

Sans-Nom ->
On a les mêmes sources ; ça a me rassure ; je commençais à douter avec cette histoire de \n

Par contre, je vois que tu réécris strncat().
Elle ne fait pas partie du string.h standard ?

Y’a pas comme une faute dans ce passage ?
(Si je demande c’est parce que je ne saisi pas le bon sens)

gcc> nope :slight_smile: du tout. C’est pas ANSI. Maintenant, c’est c99

Ah oui ; pas fait sérieusement de C depuis 98 …

ah c bon tout fonctionne merci beaucoup.

j’aurais juste encore une toute petite fonction qui deconne riena voir avec le programme au dessus.

cette fonction fait la saisie des coordonnees d’un point et de sa masse j’utilise une structure
struct complexe
{
double Re;
double Im;
}

la fonction c’est ca


int saisiesysteme(struct complexe pts_syst[nb_max_points] , int masses_syst[nb_max_points])
{
int i =0 , n = 0;  

printf("\nveuillez entrer le nombre de points ( 2<n<25)  s'il vous plait.\n");
scanf("%i" , &n); 

while((n<=2)||(n>=25))
	{
	printf("\nveuillez entrer le nombre de points ( 2<n<25)  s'il vous plait.\n");
	scanf("%i" , &n); 
	}

for(i = 0; i<n; i++)
	{
	printf("veuillez saisir les coordoonnees du point partie Re , Im puis la masse\n");
	scanf("%d %d %i" , pts_syst[i].Re , pts_syst[i].Im ,masses_syst[i]);    
	};	

return n;
};

j’obtiens une erreur de segmentation au niveau du dernier scanf, c la premiere fois que j’utilisais des structure alors j’ai p’tetre fait une erreur quelque part. est ce que pourriez juste regarder encore cette fonction.

cette fonction fait partie d’un prog plus grand
merci

en général :

scanf("%d %d %i" , &pts_syst[i].Re , &pts_syst[i].Im , &masses_syst[i]);

scanf attend des pointeurs. Dont si ça n’est pas des pointeurs, ça plante. CQFD.

ah oui c’etait ca! merci