J'ai remarqu=E9 que votre solution marche sur des exemples et non sur
d'autres.
en cas o=F9 la solution ne me donne pas le bon r=E9sultat il y a une
exception dans l'ex=E9cution.
Lorsque je fais le d=E9boguer, j'obtiens:
Windows a d=E9clench=E9 un point d'arr=EAt dans sup_col.exe.
Cela peut =EAtre d=FB =E0 une d=E9faillance du tas qui indique un bogue dan=
s
sup_col.exe ou l'une des DLL charg=E9es.
Cela peut =E9galement =EAtre d=FB =E0 l'appui sur la touche F12 lorsque
sup_col.exe a le focus
La fen=EAtre Sortie peut contenir des informations de diagnostic
suppl=E9mentaires.
Voici le contenu de feutre de sortie:
'sup_col.exe' : Charg=E9 'C:\sup_col\Debug\sup_col.exe', Les symboles
ont =E9t=E9 charg=E9s.
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\ntdll.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\kernel32.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\WinSxS
\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-
ww_597c3456\msvcr90d.dll', Les symboles ont =E9t=E9 charg=E9s.
'sup_col.exe' : Charg=E9 'C:\Program Files\SuperCopier2\SC2Hook.dll', Le
fichier binaire n'a pas =E9t=E9 g=E9n=E9r=E9 avec les informations de d=E9b=
ogage.
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\user32.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\gdi32.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\advapi32.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\rpcrt4.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\oleaut32.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\msvcrt.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\ole32.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\imm32.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\lpk.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\usp10.dll'
HEAP[sup_col.exe]: Heap block at 00332AF0 modified at 00332CB0 past
requested size of 1b4
Windows a d=E9clench=E9 un point d'arr=EAt dans sup_col.exe.
Cela peut =EAtre d=FB =E0 une d=E9faillance du tas qui indique un bogue dan=
s
sup_col.exe ou l'une des DLL charg=E9es.
Cela peut =E9galement =EAtre d=FB =E0 l'appui sur la touche F12 lorsque
sup_col.exe a le focus
La fen=EAtre Sortie peut contenir des informations de diagnostic
suppl=E9mentaires.
HEAP[sup_col.exe]: Invalid Address specified to RtlValidateHeap
( 00330000, 00332AF8 )
Windows a d=E9clench=E9 un point d'arr=EAt dans sup_col.exe.
Cela peut =EAtre d=FB =E0 une d=E9faillance du tas qui indique un bogue dan=
s
sup_col.exe ou l'une des DLL charg=E9es.
Cela peut =E9galement =EAtre d=FB =E0 l'appui sur la touche F12 lorsque
sup_col.exe a le focus
La fen=EAtre Sortie peut contenir des informations de diagnostic
suppl=E9mentaires.
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\uxtheme.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\MSCTF.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\version.dll'
'sup_col.exe' : D=E9charg=E9 'C:\WINDOWS\system32\version.dll'
'sup_col.exe' : Charg=E9 'C:\WINDOWS\system32\MSCTFIME.IME'
Si le fichier texte 'in.txt' ne contient pas des lignes vides et des colonnes vides à supprimer alors est ce que votre solution se passe bien ? votre solution est valable pour tous les cas ?
Si le fichier texte 'in.txt' ne contient pas des lignes vides et des
colonnes vides à supprimer alors est ce que votre solution se passe
bien ? votre solution est valable pour tous les cas ?
Si le fichier texte 'in.txt' ne contient pas des lignes vides et des colonnes vides à supprimer alors est ce que votre solution se passe bien ? votre solution est valable pour tous les cas ?
Merci.
programmation
j'ai testé votre solution alors elle marche sur sur des exemples et non sur autres. par exemple soit le fichier 'in.txt': 1 11010 2 11000 3 01010 4 00110 5 10100 6 01100 7 10000 8 00010
Après l'exécution de programme, on obtient le fichier 'out.txt': 1 111 2 110 3 011 4 001 5 100 6 010 7 100 8 001
et comme fichier 'position.txt' : 2 4
Mais comme vous voyez la position 2 ne présente pas une colonne vide.
j'ai testé votre solution alors elle marche sur sur des exemples et
non sur autres.
par exemple soit le fichier 'in.txt':
1 11010
2 11000
3 01010
4 00110
5 10100
6 01100
7 10000
8 00010
Après l'exécution de programme, on obtient le fichier 'out.txt':
1 111
2 110
3 011
4 001
5 100
6 010
7 100
8 001
et comme fichier 'position.txt' :
2
4
Mais comme vous voyez la position 2 ne présente pas une colonne vide.
j'ai testé votre solution alors elle marche sur sur des exemples et non sur autres. par exemple soit le fichier 'in.txt': 1 11010 2 11000 3 01010 4 00110 5 10100 6 01100 7 10000 8 00010
Après l'exécution de programme, on obtient le fichier 'out.txt': 1 111 2 110 3 011 4 001 5 100 6 010 7 100 8 001
et comme fichier 'position.txt' : 2 4
Mais comme vous voyez la position 2 ne présente pas une colonne vide.
Mais pourquoi tu ne débugges pas avec VS ? Si tu ne fais que copier-coller sans comprendre la moindre ligne, tu ne vas jamais progresser :-(
Surtout vu que tu sais que ce sont les colonnes qui ne sont pas bonnes. Donc tu mets un Breakpoint dans la boucle, tu avances pas à pas dans le code en visualisant toutes les variables et tu vois qu'il faut remplacer if (dataTabString->sAttrib[i] == '0') nColumn[i]+=1; par if (dataTabString[nCpt].sAttrib[i]== '0') nColumn[i]+=1;
On 29 sep, 00:40, programmation <bouali.a...@gmail.com> wrote:
Que proposez vous comme solution ?
Mais pourquoi tu ne débugges pas avec VS ?
Si tu ne fais que copier-coller sans comprendre la moindre ligne, tu
ne vas jamais progresser :-(
Surtout vu que tu sais que ce sont les colonnes qui ne sont pas
bonnes.
Donc tu mets un Breakpoint dans la boucle, tu avances pas à pas dans
le code en visualisant toutes les variables et tu vois qu'il faut
remplacer
if (dataTabString->sAttrib[i]
== '0')
nColumn[i]+=1;
par
if (dataTabString[nCpt].sAttrib[i]== '0')
nColumn[i]+=1;
Mais pourquoi tu ne débugges pas avec VS ? Si tu ne fais que copier-coller sans comprendre la moindre ligne, tu ne vas jamais progresser :-(
Surtout vu que tu sais que ce sont les colonnes qui ne sont pas bonnes. Donc tu mets un Breakpoint dans la boucle, tu avances pas à pas dans le code en visualisant toutes les variables et tu vois qu'il faut remplacer if (dataTabString->sAttrib[i] == '0') nColumn[i]+=1; par if (dataTabString[nCpt].sAttrib[i]== '0') nColumn[i]+=1;
programmation
> remplacer if (dataTabString->sAttrib[i] == '0') nColumn[i]+=1; par if (dataTabString[nCpt].sAttrib[i]== '0') nColumn[i]+=1;
Merci beaucoup pour votre aide.
J'ai deux question :
1) J'ai remarqué que la solution se passe bien même si on n'ajoute pas : memset(&dataTabString[nCpt], 0, sizeof(dataStruct)); et le test : if (strlen(dataTabString[nCpt].sAttrib) > 0) nAttribLength = strlen(dataTabString[nCpt].sAttrib)+ 1;
donc quel est le rôle de ces deux ajouts ?
2) Dans la solution vous mettez nColumn[32] = {0} mais on peut avoir que le deuxième champs contient plus que 32 colonnes ou bien moins. Dans mon cas, on peut avoir plus que 32. En général on ne sait pas en avance le nombre nColumn de deuxième champ.
La même chose pour 'char sAttrib[32] ' qui fait partie de la déclaration de structure.
Quelle est la modification à ajouter dans la solution suivante pour éviter le problème de cette taille fixe de nColumn ?
je souhaite que vous m'aidez et je n'oublierai vos aides.
Merci.
> remplacer
if (dataTabString->sAttrib[i]
== '0')
nColumn[i]+=1;
par
if (dataTabString[nCpt].sAttrib[i]== '0')
nColumn[i]+=1;
Merci beaucoup pour votre aide.
J'ai deux question :
1)
J'ai remarqué que la solution se passe bien même si on n'ajoute pas :
memset(&dataTabString[nCpt], 0, sizeof(dataStruct));
et le test :
if (strlen(dataTabString[nCpt].sAttrib) > 0)
nAttribLength = strlen(dataTabString[nCpt].sAttrib)+ 1;
donc quel est le rôle de ces deux ajouts ?
2) Dans la solution vous mettez nColumn[32] = {0}
mais on peut avoir que le deuxième champs contient plus que 32
colonnes ou bien moins.
Dans mon cas, on peut avoir plus que 32.
En général on ne sait pas en avance le nombre nColumn de deuxième
champ.
La même chose pour 'char sAttrib[32] ' qui fait partie de la
déclaration de structure.
Quelle est la modification à ajouter dans la solution suivante pour
éviter le problème de cette taille fixe de nColumn ?
> remplacer if (dataTabString->sAttrib[i] == '0') nColumn[i]+=1; par if (dataTabString[nCpt].sAttrib[i]== '0') nColumn[i]+=1;
Merci beaucoup pour votre aide.
J'ai deux question :
1) J'ai remarqué que la solution se passe bien même si on n'ajoute pas : memset(&dataTabString[nCpt], 0, sizeof(dataStruct)); et le test : if (strlen(dataTabString[nCpt].sAttrib) > 0) nAttribLength = strlen(dataTabString[nCpt].sAttrib)+ 1;
donc quel est le rôle de ces deux ajouts ?
2) Dans la solution vous mettez nColumn[32] = {0} mais on peut avoir que le deuxième champs contient plus que 32 colonnes ou bien moins. Dans mon cas, on peut avoir plus que 32. En général on ne sait pas en avance le nombre nColumn de deuxième champ.
La même chose pour 'char sAttrib[32] ' qui fait partie de la déclaration de structure.
Quelle est la modification à ajouter dans la solution suivante pour éviter le problème de cette taille fixe de nColumn ?
je souhaite que vous m'aidez et je n'oublierai vos aides.
Merci.
nico
programmation wrote:
2) Dans la solution vous mettez nColumn[32] = {0} mais on peut avoir que le deuxième champs contient plus que 32 colonnes ou bien moins. Dans mon cas, on peut avoir plus que 32. En général on ne sait pas en avance le nombre nColumn de deuxième champ.
La même chose pour 'char sAttrib[32] ' qui fait partie de la déclaration de structure.
Un format de fichier est toujours défini à l'avance. Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
programmation wrote:
2) Dans la solution vous mettez nColumn[32] = {0}
mais on peut avoir que le deuxième champs contient plus que 32
colonnes ou bien moins.
Dans mon cas, on peut avoir plus que 32.
En général on ne sait pas en avance le nombre nColumn de deuxième
champ.
La même chose pour 'char sAttrib[32] ' qui fait partie de la
déclaration de structure.
Un format de fichier est toujours défini à l'avance.
Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
2) Dans la solution vous mettez nColumn[32] = {0} mais on peut avoir que le deuxième champs contient plus que 32 colonnes ou bien moins. Dans mon cas, on peut avoir plus que 32. En général on ne sait pas en avance le nombre nColumn de deuxième champ.
La même chose pour 'char sAttrib[32] ' qui fait partie de la déclaration de structure.
Un format de fichier est toujours défini à l'avance. Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
programmation
> Un format de fichier est toujours défini à l'avance. Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
Je ne sais pas en avance la taille de deuxième champs en avance car le fichier est généré automatiquement dans le programme. Si je mis la taille 512 alors que la taille réelle est 50. Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvaise gestion de l'espace mémoire ?
> Un format de fichier est toujours défini à l'avance.
Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
Je ne sais pas en avance la taille de deuxième champs en avance car le
fichier est généré automatiquement dans le programme.
Si je mis la taille 512 alors que la taille réelle est 50.
Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvaise
gestion de l'espace mémoire ?
> Un format de fichier est toujours défini à l'avance. Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
Je ne sais pas en avance la taille de deuxième champs en avance car le fichier est généré automatiquement dans le programme. Si je mis la taille 512 alors que la taille réelle est 50. Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvaise gestion de l'espace mémoire ?
nico
programmation wrote:
Un format de fichier est toujours défini à l'avance. Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
Je ne sais pas en avance la taille de deuxième champs en avance car le fichier est généré automatiquement dans le programme. Si je mis la taille 512 alors que la taille réelle est 50. Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvaise gestion de l'espace mémoire ?
Si tu alloue plus grand que la taille reçue, pourquoi ça ne serait pas bon ? C'est toujours l'inverse qui pose problème.
programmation wrote:
Un format de fichier est toujours défini à l'avance.
Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
Je ne sais pas en avance la taille de deuxième champs en avance car le
fichier est généré automatiquement dans le programme.
Si je mis la taille 512 alors que la taille réelle est 50.
Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvaise
gestion de l'espace mémoire ?
Si tu alloue plus grand que la taille reçue, pourquoi ça ne serait pas bon ?
C'est toujours l'inverse qui pose problème.
Un format de fichier est toujours défini à l'avance. Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 512
Je ne sais pas en avance la taille de deuxième champs en avance car le fichier est généré automatiquement dans le programme. Si je mis la taille 512 alors que la taille réelle est 50. Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvaise gestion de l'espace mémoire ?
Si tu alloue plus grand que la taille reçue, pourquoi ça ne serait pas bon ? C'est toujours l'inverse qui pose problème.
programmation
On 30 sep, 19:36, nico wrote:
programmation wrote: >> Un format de fichier est toujours défini à l'avance. >> Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 5 12
> Je ne sais pas en avance la taille de deuxième champs en avance car l e > fichier est généré automatiquement dans le programme. > Si je mis la taille 512 alors que la taille réelle est 50. > Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvai se > gestion de l'espace mémoire ?
Si tu alloue plus grand que la taille reçue, pourquoi ça ne serait pa s bon ? C'est toujours l'inverse qui pose problème.
Je voulais allouer la taille exacte ni plus ni moins. Comment faire ceci dans le code au dessus ?
On 30 sep, 19:36, nico <n...@nico.com> wrote:
programmation wrote:
>> Un format de fichier est toujours défini à l'avance.
>> Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 5 12
> Je ne sais pas en avance la taille de deuxième champs en avance car l e
> fichier est généré automatiquement dans le programme.
> Si je mis la taille 512 alors que la taille réelle est 50.
> Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvai se
> gestion de l'espace mémoire ?
Si tu alloue plus grand que la taille reçue, pourquoi ça ne serait pa s bon ?
C'est toujours l'inverse qui pose problème.
Je voulais allouer la taille exacte ni plus ni moins. Comment faire
ceci dans le code au dessus ?
programmation wrote: >> Un format de fichier est toujours défini à l'avance. >> Si 32 peut ne pas etre suffisant, mets une valeur plus grande, genre 5 12
> Je ne sais pas en avance la taille de deuxième champs en avance car l e > fichier est généré automatiquement dans le programme. > Si je mis la taille 512 alors que la taille réelle est 50. > Est ce que c'est bon de mettre nColumn[512] = {0} ? pas une mauvai se > gestion de l'espace mémoire ?
Si tu alloue plus grand que la taille reçue, pourquoi ça ne serait pa s bon ? C'est toujours l'inverse qui pose problème.
Je voulais allouer la taille exacte ni plus ni moins. Comment faire ceci dans le code au dessus ?
Bertrand Lenoir-Welter
> Je voulais allouer la taille exacte ni plus ni moins. Comment faire ceci dans le code au dessus ?
Réfléchissez. Si vous êtes absolument sûr que ce que vous mettez dans votre chaîne ne dépassera *jamais* 50 caractères, il suffit de déclarer une taille de 51 (en comptant le zéro terminal). Mais c'est à vous de ne pas en déborder lorsque vous faites des opérations dessus, sinon plantage assuré. Utilisez strncpy() au lieu de strcpy(), par exemple, ou bien memmove.
Si vous voulez allouer l'espace mémoire correspondant *exactement* à ce que vous allez mettre dans la chaîne, alors passez à l'allocation dynamique avec malloc() et free(). Mais pour une chaîne unique ou empilée, a fortiori d'une cinquantaine de caractères, ça ne vaut pas vraiment la peine.
> Je voulais allouer la taille exacte ni plus ni moins. Comment faire
ceci dans le code au dessus ?
Réfléchissez. Si vous êtes absolument sûr que ce que vous mettez dans
votre chaîne ne dépassera *jamais* 50 caractères, il suffit de déclarer
une taille de 51 (en comptant le zéro terminal). Mais c'est à vous de ne
pas en déborder lorsque vous faites des opérations dessus, sinon
plantage assuré. Utilisez strncpy() au lieu de strcpy(), par exemple, ou
bien memmove.
Si vous voulez allouer l'espace mémoire correspondant *exactement* à ce
que vous allez mettre dans la chaîne, alors passez à l'allocation
dynamique avec malloc() et free(). Mais pour une chaîne unique ou
empilée, a fortiori d'une cinquantaine de caractères, ça ne vaut pas
vraiment la peine.
> Je voulais allouer la taille exacte ni plus ni moins. Comment faire ceci dans le code au dessus ?
Réfléchissez. Si vous êtes absolument sûr que ce que vous mettez dans votre chaîne ne dépassera *jamais* 50 caractères, il suffit de déclarer une taille de 51 (en comptant le zéro terminal). Mais c'est à vous de ne pas en déborder lorsque vous faites des opérations dessus, sinon plantage assuré. Utilisez strncpy() au lieu de strcpy(), par exemple, ou bien memmove.
Si vous voulez allouer l'espace mémoire correspondant *exactement* à ce que vous allez mettre dans la chaîne, alors passez à l'allocation dynamique avec malloc() et free(). Mais pour une chaîne unique ou empilée, a fortiori d'une cinquantaine de caractères, ça ne vaut pas vraiment la peine.
programmation
>Utilisez strncpy() au lieu de strcpy(), par exemple, ou bien memmove.
Est ce que strncpy() et memmove() résoudre le problème ? Si oui comment les exploiter ?
Si vous voulez allouer l'espace mémoire correspondant *exactement* à ce que vous allez mettre dans la chaîne, alors passez à l'allocation dynamique avec malloc() et free(). Mais pour une chaîne unique ou empilée, a fortiori d'une cinquantaine de caractères, ça ne vaut pa s vraiment la peine.
Donc, Quelles sont les modifications à ajouter dans le programme au dessus ?
Merci.
>Utilisez strncpy() au lieu de strcpy(), par exemple, ou
bien memmove.
Est ce que strncpy() et memmove() résoudre le problème ? Si oui
comment les exploiter ?
Si vous voulez allouer l'espace mémoire correspondant *exactement* à ce
que vous allez mettre dans la chaîne, alors passez à l'allocation
dynamique avec malloc() et free(). Mais pour une chaîne unique ou
empilée, a fortiori d'une cinquantaine de caractères, ça ne vaut pa s
vraiment la peine.
Donc, Quelles sont les modifications à ajouter dans le programme au
dessus ?
>Utilisez strncpy() au lieu de strcpy(), par exemple, ou bien memmove.
Est ce que strncpy() et memmove() résoudre le problème ? Si oui comment les exploiter ?
Si vous voulez allouer l'espace mémoire correspondant *exactement* à ce que vous allez mettre dans la chaîne, alors passez à l'allocation dynamique avec malloc() et free(). Mais pour une chaîne unique ou empilée, a fortiori d'une cinquantaine de caractères, ça ne vaut pa s vraiment la peine.
Donc, Quelles sont les modifications à ajouter dans le programme au dessus ?