begin process at 2012 05 28 16:00:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

CHAR écrasé...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

CHAR écrasé...

jeudi 19 août 2004 à 16:39:38 | CHAR écrasé...

malik7934

Hello,

Ecoutez ce problème bizarre: j'ai un prog (avec GMP et Win32) qui plante quand je travaille avec des chiffres très élevés. Je SAIS que ce n'est pas un problème de GMP, mais certainement de mémoire (y a beau dire, j'arrive toujours pas à me faire au C pour ça!!!)

A un moment, il construit un char qu'il sauve dans un fichier et qui s'appelle concat et si tu ouvres le fichier, tu as, par exemple 01011000100100000111 (20 bits). J'ai une boucle qui coupe
cela en deux: concatA et concatB et ajoute un 1 en bit de point faible (à droite quoi):

for(x=0;x<10;x++){
concatA[x]=concat[x];
concatB[x]=concat[x+10];}
strcat(concatA,"1");strcat(concatB,"1");

Pourtant, le programme me répond par exemple (quand il plante)
01011000106648911 et 01000001115601011000106648911 au lieu de 01011000101 et 01000001111, comme si c'était parasité par 664891 et 560101100010664891 (on remarque dans le concatB erroné qu'il y a concatA sans le 1 final...)!

Au début du programme je déclare concat, concatA et concatB ainsi:
char concat[21]={0}; // Je suis jamais sûr si c'est 21 ou 20 que je dois mettre
char concatA[12]={0};char concatB[12]={0}; // idem: 11 ou 12?

et j'affiche ainsi:

bRet = WriteFile(hDestFile,concatA,strlen(concatA),&dwO,0);
bRet = WriteFile(hDestFile,"\r\n ",1, &dwO,0);
bRet = WriteFile(hDestFile,concatB,strlen(concatB),&dwO,0);

Une idée? Parce que là, c'est strange.
concat fait FORCEMENT 20 bits, concatA et concatB doivent en faire 11...

HELP...
jeudi 19 août 2004 à 16:50:01 | Re : CHAR écrasé...

AlexMAN

Membre Club
char concat[21] = {0};

Alors la, tu as une chaine de 20 caracteres et le dernier est pour le zero final. Tjrs une zero final. Mais la, tu ninitialises pas tte ta chaine a 0, fais ZeroMemory pour ca.
jeudi 19 août 2004 à 16:57:52 | Re : CHAR écrasé...

malik7934

Des fois je me dis que je devrais apprendre le C avant de coder en C... ;o) Merci pour l'info, ZeroMemory a liquidé mon problème!!!

On peut initialiser tout et n'importe quoi comme ça ou miwux vaut-il utiliser cette fonction avec modération?

Parce qu'à ce moment là, je vire tous les char buf[XY] = {0}; pour les remplacer par ZeroMemory(buf, XY); !!!
jeudi 19 août 2004 à 17:05:04 | Re : CHAR écrasé...

AlexMAN

Membre Club
En fait, je crois que c'est une macro car elle appelle memset().
Tu peux/dois l'appeller kan tu en as besoin, apres tt depend des cas etc...Mais tes buf[100] = {0} ne servent a rien, ca met, je crois, le premier octet a 0. Rien de plus.
Voila ravi d'avoir pu t'aider

++
jeudi 19 août 2004 à 17:16:46 | Re : CHAR écrasé...

DevGizmo

Ou alors il aurait fallu mettre

buf[100] = {0, 0, 0, 0, .....100 fois..., 0 }
Mais c'est un peu prise de tete :))))))))))))

Au fait alexman, j'avais raison... ;)
jeudi 19 août 2004 à 17:23:32 | Re : CHAR écrasé...

vecchio56

Administrateur CodeS-SourceS
C'est pas plutot l'inverse?
memset appelle ZeroMemory (alias RtlZeroMemory)
Pour revenir au pb de départ, il me semble que char buf[100] = {0} met tout a zéro
jeudi 19 août 2004 à 17:27:12 | Re : CHAR écrasé...

malik7934

renseignement pris, effectivement char buf[100] = {0} met tout a zéro ... par contre, ZeroMemory est visiblement plus "sûr" quand tu utilises un strcat, histoire de pas tomber sur une plage déjà allouée ;o)
jeudi 19 août 2004 à 17:30:59 | Re : CHAR écrasé...

djl

TYPE t = {0} ; initialise tout les octets à 0
jeudi 19 août 2004 à 17:32:50 | Re : CHAR écrasé...

AlexMAN

Membre Club
#include <stdio.h>
#include <stdlib.h>

int main()
{
char sz[] = "%s";
char coucou[100] = {65};
printf("%100s", coucou);

system("PAUSE");

}

ce code n'affiche pas ke des 'A' donc pas tt les octets sont initialisé a 65.

++
jeudi 19 août 2004 à 17:34:33 | Re : CHAR écrasé...

vecchio56

Administrateur CodeS-SourceS
on a dit avec des 0
djl>TYPE t = {} aurait l'air de suffire même

1 2

Cette discussion est classée dans : char, concat, bret, concata, concatb


Répondre à ce message

Sujets en rapport avec ce message

probleme de chaine de caractere [ par lamoueste ] Voila j'ai un probleme avec une chaine de caractere j'aimerais pouvoir avec cette double boucle faire la copie d'un fichier XX.txt avec XX ayant une v Variable d'environnement [ par andoid ] Bonjour j'ai un probléme sur mon code au faite je m'entraine pour comprendre les variables d'environnement : le code lit au clavier et dois créer une Probleme Erreur de segmentation [ par sivas58 ] [color=red]Bonjour a tous; J'ai besoins d'aide sur une erreur de segmentation.[/color] [code=cpp]int decoupeLignePipe(char *chaine,char **commande1, erreur : Invalid struct or union type [ par Nico_35136 ] Bonjour, Voila , en ce moment je m'arrache les cheveux sur une allocation dynamique d'une structure en mémoire. Voici mes variable et structure que Processus en C [ par annaelle75 ] Bonjour, Je commence la programmation system sous linux avec le langage C. Je voudrais utiliser un fork() pour trouver un fichier dans un répertoire Pointeurs et tableau de char ? [ par phyyl ] Bonjour ! J'ai un petit soucis ... voici mon code: [code=cpp] #include using namespace std; void modify(char* ptr[]); int main() { char mot[]= Problème renommer des fichiers avec la fonction rename() [ par kepon72 ] Bonjour, Voila j'ai coder un petit programme en C qui me permet de renommer des fichiers .avi présent dans un répertoire de la même façon le Titre est Probléme à créer un tableaux à partir des structures [ par wissouramos ] Bonjour à tous. J'ai un petit problème de syntax, après plusieurs recherche sur le net, je n'ai pu ni affirmer ou ni infirmer la validation de mon cod


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,668 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales