[C] Probleme avec strcat
Résolu
mybox
Messages postés
49
Statut
Membre
-
mybox Messages postés 49 Statut Membre -
mybox Messages postés 49 Statut Membre -
Bonjour,
J'ai un soucis en langage C, je cherche à faire un programme qui me génère automatiquement sur la base d'un calcul de hauteur x largeur, une image.
Mon début de code est le suivant :
La compilation se passe correctement, mais le programme plante lors de l'exécution.
Je pense que mon problème se situe dans le strcat (identifié en remontant le code au fur et à mesure en utilisant des system pause), de plus j'ai un warning : 18 [Warning] passing arg 2 of `strcat' makes pointer from integer without a cast
Malgré mes recherches, je ne trouve pas de solutions et je sens que l'erreur est toute bête...
Question supp : j'ai besoin d'enregistrer les données dans une variables (un peu comme un buffer), la suite de mon programme est une boucle for sur la base du produit hauteur x largeur qui va remplir la variable d'un caractère à chaque itération, suis-je sur la bonne voie ?
Merci beaucoup
J'ai un soucis en langage C, je cherche à faire un programme qui me génère automatiquement sur la base d'un calcul de hauteur x largeur, une image.
Mon début de code est le suivant :
#include <stdio.h> /*scanf, printf*/
#include <string.h> /*strcpy, strcat*/
int main() {
FILE *p; /* pointeur sur FILE */
char donnees[255];
int i, largeur, hauteur, calc;
printf("Largeur de l'image : ");
scanf("%d", &largeur);
printf("Hauteur de l'image : ");
scanf("%d", &hauteur);
strcpy(donnees,"P2 ");
strcat(donnees,largeur); // changer le int en char
strcat(donnees," ");
strcat(donnees,hauteur);
strcat(donnees," 10");
printf("%s\n",donnees); // affiche pas les nb ; prob relation integer et chaine ?
system("pause");
La compilation se passe correctement, mais le programme plante lors de l'exécution.
Je pense que mon problème se situe dans le strcat (identifié en remontant le code au fur et à mesure en utilisant des system pause), de plus j'ai un warning : 18 [Warning] passing arg 2 of `strcat' makes pointer from integer without a cast
Malgré mes recherches, je ne trouve pas de solutions et je sens que l'erreur est toute bête...
Question supp : j'ai besoin d'enregistrer les données dans une variables (un peu comme un buffer), la suite de mon programme est une boucle for sur la base du produit hauteur x largeur qui va remplir la variable d'un caractère à chaque itération, suis-je sur la bonne voie ?
Merci beaucoup
3 réponses
Bonsoir,
A cette ligne:
strcat(donnees,largeur); // changer le int en char
donnees est de type char* et largeur de type int.
Tu ne peux pas concaténer directement un char* et un int.
En effet la fonction strcat prend en paramètre deux chaines de caractères (char*)
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcat.3.html
Il faut que tu convertisse la variable largeur de type int en char*.
Tu peux recoder une fonction qui le fait ou utiliser sprintf:
sprintf(chaine,"%d",i);
où char* chaine est ta chaine de destination et i l'entier int à convertir.
A cette ligne:
strcat(donnees,largeur); // changer le int en char
donnees est de type char* et largeur de type int.
Tu ne peux pas concaténer directement un char* et un int.
En effet la fonction strcat prend en paramètre deux chaines de caractères (char*)
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcat.3.html
Il faut que tu convertisse la variable largeur de type int en char*.
Tu peux recoder une fonction qui le fait ou utiliser sprintf:
sprintf(chaine,"%d",i);
où char* chaine est ta chaine de destination et i l'entier int à convertir.
Wardog a tout dit.
Le plus simple ici en effet est d'utiliser sprintf ou encore mieux snprintf.
Exemple :
Le plus simple ici en effet est d'utiliser sprintf ou encore mieux snprintf.
Exemple :
#include <stdio.h> /*scanf, printf*/
#include <string.h> /*strcpy, strcat*/
int main(void) {
FILE *p; /* pointeur sur FILE */
char donnees[255];
int i, largeur, hauteur, calc;
printf("Largeur de l'image : ");
scanf("%d", &largeur);
printf("Hauteur de l'image : ");
scanf("%d", &hauteur);
snprintf(donnees, sizeof donnees,"P2 %d %d 20",largeur, hauteur);
//ou sprintf(donnees, "P2 %d %d 20",largeur, hauteur);
puts(donnees); // affiche pas les nb ; prob relation integer et chaine ?
system("pause");
return 0;
}