CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

Lapintade
Lapintade
Niveau 30
03 novembre 2006 à 09:33:14

godrik > Le truc le plus embettant sur DS, c´est l´absence de "float". Tu dois donc tout faire sur des entier. Des fonctions et macros t´aident a gerer un type en virgule fixe.

godrik
godrik
Niveau 30
03 novembre 2006 à 09:37:58

Lapintade: Ah. C´est toujours vrai ca ? J´ai developpé sur GBA (ARM7) un moteur 3D (oui en virgule fixe sur 16 bits). Je pensais qu´il y avait des flottant sur ARM9.
En fait, je n´ai pas bien compris comment on envoyait du code sur DS. C´est ce qui me retient principalement en ce moment. Je ne trouve pas vraiment d´info clair. A propos des passme, j´ai l´impression que ca dépend des firmware des DS mais personne ne semble dire comment récupérer le numero de son firmware, ni les quels sont compatible ni meme comment le mettre a jour. Enfin, je manque d´info, si tu as ca...
En passant, ca coute combien un kit officiel de developpement ?

Kyzzok
Kyzzok
Niveau 10
03 novembre 2006 à 12:09:27

:ange:

godrik
godrik
Niveau 30
03 novembre 2006 à 14:39:51

Kyzzok, je ne suis pas sur d´avoir compris ce que tu voulais ?
Le lien te donne des informations sur la programmation réseau en C. Ca ne fonctionne directement que sur UNIX. Mais les concepts sous windows sont les memes.

Peut etre devra tu consulter la MSDN a la recherche des fonctions correspondantes. De mémoire, elles ont le même nom.

pouranat
pouranat
Niveau 5
07 novembre 2006 à 13:05:49

bonjour , en faisant un pointeur sur structures et en l envoyant a une fonction afin de modifier le contenu de ma variable de type structure personne j obtiens le code d erreur suivant : " error C2440: ´=´ : impossible de convertir de ´const char [7]´ en ´char [100]´"

en relisant a pls reprises mon code source , je ne comprends pas d ou vient l erreur ,si vous pouviez me venir en aide
le code source :

Code : C++#include <iostream>

  1. include <stdlib.h>
  2. include <stdio.h>

using namespace std ;

typedef struct personne personne ;
struct personne
{
char nom[100];
char prenom[100];
long age ;
};

void modifierTableau ( personne *joueur )
{
(*joueur).nom="thomas" ;
}

int main ()
{
personne joueur[1];
int i;
for(i=0;i<=1;i++)
{
cout <<" joueur " << i+1 << endl;
cout <<"nom ?" <<endl ;
cin >> joueur[i].nom ;
cout << "prenom ?" << endl ;
cin >> joueur[i].prenom ;
cout << "age ? " << endl ;
cin >> joueur[i].age ;

}
affichage: // etiquette
for(i=0;i<=1;i++)
{
cout << "joueur " << i+1 << endl ;

cout <<"nom : " << joueur[i].nom << endl ;
cout <<"prenom : "<< joueur[i].prenom << endl ;
cout <<"age : " << joueur[i].age << endl ;
}
cout << " voullez vous modifier le nom du joueur 1? " << endl ;
int reponse =0 ;
cout << " 1 pour oui " << endl ;
cin >> reponse ;
if (reponse == 1)
{
modifierTableau(&joueur[0]) ;
goto affichage ; // vers affichage
}

system("PAUSE" );
return (0) ;

}

godrik
godrik
Niveau 30
07 novembre 2006 à 13:17:52

Ici réside le problème:

void modifierTableau ( personne *joueur )
{
(*joueur).nom="thomas" ;
}

tu essaye d´affecter un tableau a un autre (et ils n´ont d´ailleurs pas la meme taille). Cette opération n´est pas valide en C.

notes bien que le code suivant ne compile pas:
int main ()
{
char tab[100];
char tab2[100];
tab = tab2;
return 0;
}

Il faut recopier le contenu d´un tableau dans un autre.
La fonction strcpy peut t´aider a faire cela.

En passant, vous savez qu´il y a un hack qui permet de le faire quand meme ?
struct toto
{
char tab[100];
};

int main ()
{
char tab[100];
char tab2[100];
*((struct toto*) &tab) = *((struct toto*) &tab2);
return 0;
}

pouranat
pouranat
Niveau 5
07 novembre 2006 à 13:59:49

merci bcq pr ta reponse rapide et precise ;)
je v modifier cela ;)

libjch
libjch
Niveau 1
07 novembre 2006 à 16:49:16

´ai une question a propos de ton :
char tab[100];
char tab2[100];

  • ((struct toto*) &tab) = *((struct toto*) &tab2);

Pourquoi passer par une structure ?
Il n´y aurait pas moyen de just changer la valeur tu pointeur tab ?
genre :
&tab = &tab2; ?

godrik
godrik
Niveau 30
07 novembre 2006 à 17:15:35

de deux choses. une adresse ne peut pas etre une l-value.
Le code sert a copier un tableau dans l´autre. Les opérations de recopie existent sur les structures. En faisant croire que les deux tableau sont des structures, on obtient une recopie bit a bit (en fait les compilateurs font un memcopy)

pouranat
pouranat
Niveau 5
07 novembre 2006 à 17:46:07

oups j ai encore un souci , cette fois la compilation se passe bien , j arrive a modifier une des composantes de ma variable joueur (j ai pris age pr simplifier .
par contre quand je lance le programme , tout a la fin de l execution j ai ce message d erreur :
"Run-Time Check Failure #2 - Stack around the variable ´joueur´ was corrupted."
je ne vois pas a quoi cela fait reference ...
merci de votre aide :)

Lapintade
Lapintade
Niveau 30
07 novembre 2006 à 18:55:37

Ca veut dire que tu ecris dans de la memoire ou tu devrais pas.

Lapintade
Lapintade
Niveau 30
07 novembre 2006 à 18:57:25

Godrik > J´ai une DS Lite et une supercard + SuperKey et ca marche plutot bien. Ca fut pas compliqué a mettre en place et tout etait deja a jour (firmware). Le plus dur c´est de trouver le logiciel pour "patcher" les roms et de bien regler les options.
Un kit de dev officiel ca coute dans les 2000 Eur.

pouranat
pouranat
Niveau 5
07 novembre 2006 à 19:24:55

ok je comprends bien la theorie mais je viens d executer pas a pas le programme pr voir ou ca n allait pas et ce qui m interpelle c est que c est vraiment a la derniere ligne que ca renvoie le message d erreur , avant tout se passe bien ...
donc sincerement apres mure reflexion je ne comprends pas d ou vient le bug ...

elhuron
elhuron
Niveau 6
07 novembre 2006 à 19:40:16

Salut!
J´ai une question en SDL, j´ai une surface ecran sur laquelle je blit toutes les images.
J´aimerais bien copier cette surface ecran dans une autre surface.

SDL_Surface *ancienEcran = ecran;
//ne fonctionne pas du tout

J´ai fouiller vite fait SDL_Video.h, mais j´ai pas
trouvé mon bonheur.

Je pense que la solution de dernier recours serais de copier chaque pixel 1 a 1, mais bon, je voudrais savoir si il y aurais plus simple :)

Merci.

elhuron
elhuron
Niveau 6
07 novembre 2006 à 20:31:27

Désolé du derangement, j´ai fait un petite recherche sur le forum, et j´ai trouvé.
J´aurais pas pensé trouvé reponse a ma question, je vais tester ca, ca devrais surement fonctionner.

Afficher l´ecran sur la surface de copie.
Je suis tellement habituer a n´afficher que sur l´ecran que cette solution ne m´est pas parvenue.

elhuron
elhuron
Niveau 6
07 novembre 2006 à 20:33:54

Ca fonctionne parfaitement :)

Lapintade
Lapintade
Niveau 30
07 novembre 2006 à 20:59:10

pouranat > En fait je pense que ton erreur est bien avant, cependant c´est a la fin de la fonction que le programme verifie l´etat de la pile. Tu as certainement du definir un tableau en local et tu dois ecrire dans des indices superieurs a la taille du tableau.

Lapintade
Lapintade
Niveau 30
07 novembre 2006 à 21:02:03

for(i=0;i<=1;i++)

C´est :

for(i=0;i<1;i++)

Sinon tu fais deux tours de boucles, 0 et 1, or ton tableau joueur ne fait qu´un seul element (le 0), je pense que c´est ton probleme.

godrik
godrik
Niveau 30
07 novembre 2006 à 21:21:40

merci lapin, je vais regarder du coté des supercard.

pouranat
pouranat
Niveau 5
07 novembre 2006 à 21:36:37

merci +++ lapintade :
en fait je cherchais bien a definir 2 joueurs donc le <= etait valable
par contre j ai vraiment fait une erreur bete dans la declaration du tableau personne joueur[] ou j avais mis 1 au lieu de deux en me disant qu il y avait le [O] au depart alors que c est dans l attribution et non dans la definition que ca commence par le zero ...
vraiment tu m enleves un poids ;)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment