Langage c
alicia85
Messages postés
68
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
svp j ai un probleme en c .j arrive pas a allouer l 'espace memoire d'un pointeur sur caractere
merci j ai besoin de cela svp
svp j ai un probleme en c .j arrive pas a allouer l 'espace memoire d'un pointeur sur caractere
merci j ai besoin de cela svp
A voir également:
- Langage c
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
3 réponses
Re,
je n'ai pas d'erreur moi
en revanche je n'ai pas compris ce que ton code veut faire
en plus j'ai remarqué par exemple que tes fonctions
et
voici les warnings que j'obtiens à la compilations
le programme je l'exécute mais je n'ai aucun résultat à part je suis 0erreur dans le code
je n'ai pas d'erreur moi
en revanche je n'ai pas compris ce que ton code veut faire
en plus j'ai remarqué par exemple que tes fonctions
//FONCTION QUI DECODE UNE CHAINE EN ENTIER DECIMAL NON SIGNE int decode_uns (char *s) { int i, val, l = strlen (s); char c; for (i = l - 1; i >= 0; i++) { if (s[i] != 0) val = val + pow (2, i - l + 1); } }
et
int decode_int (char *s) { int val = 0, i, l = strlen (s); i = l - 1; while (i >= 0) { if (s[i] == 1) { val = val + pow (2, i - l + 1); i++; } i++; } }ne retournent rien, et normalement les fonctions devraient retourner un int
voici les warnings que j'obtiens à la compilations
lami20j@debian:~$ gcc -W -Wall alicia.c -lm alicia.c: In function 'verif': alicia.c:9: warning: comparison between signed and unsigned alicia.c: In function 'extract': alicia.c:44: warning: control reaches end of non-void function alicia.c: In function 'decode_int': alicia.c:59: warning: control reaches end of non-void function alicia.c: In function 'decode_uns': alicia.c:65: warning: unused variable 'c' alicia.c:71: warning: control reaches end of non-void function alicia.c: In function 'decode_real1': alicia.c:135: warning: unused variable 'l' alicia.c: In function 'decode_char': alicia.c:161: warning: unused variable 'n' alicia.c: In function 'decode_chaine': alicia.c:172: warning: unused variable 'val' alicia.c: In function 'main': alicia.c:213: warning: comparison between signed and unsigned alicia.c:234: warning: suggest parentheses around assignment used as truth value alicia.c:193: warning: unused variable 'j'
le programme je l'exécute mais je n'ai aucun résultat à part je suis 0erreur dans le code
oulà lami20j tu me déçoit !!! lol
Bon les fonctions retournent bien quelques chose par référence : les chaines de caractères des arguments d'entrée, car une chaine c'est un pointeur de caractères.
Par contre ce que veut peut être dire lami20j c'est que tu met des int NomDeTaFonction alors que ce serai plus joli de mettre des void.
Après je dois avouer que j'ai pas regardé ton programme, mais les calculs qui sont dans ces fonctions, il faudra bien les renvoyer.
++
et j'espère que j'ai pas dit trop de bêtises ^^.
Bon les fonctions retournent bien quelques chose par référence : les chaines de caractères des arguments d'entrée, car une chaine c'est un pointeur de caractères.
Par contre ce que veut peut être dire lami20j c'est que tu met des int NomDeTaFonction alors que ce serai plus joli de mettre des void.
Après je dois avouer que j'ai pas regardé ton programme, mais les calculs qui sont dans ces fonctions, il faudra bien les renvoyer.
++
et j'espère que j'ai pas dit trop de bêtises ^^.
oulà lami20j tu me déçoit !!! lol
je crois que je vais continuer à te décevoir ;-)
Dans le main je vois ça
int i,j,k,l,v,n;
char*sh,*type,*c,c1;
Donc i c'est bien un int et sh un pointeur de caractère
Et plus bas (toujours dans main) je vois ça
Le problème c'est que dans la fonction decode_int il n'y a pas de return (je pense que ça doit être return val; )
je crois que je vais continuer à te décevoir ;-)
Dans le main je vois ça
int i,j,k,l,v,n;
char*sh,*type,*c,c1;
Donc i c'est bien un int et sh un pointeur de caractère
Et plus bas (toujours dans main) je vois ça
if(v==1){ i=decode_int(sh); printf("le code est %d\n:",i); }Donc la fonction decode_int prends un argument un pointeur de caractère et doit retourner un entier qu'on le stocke en i
Le problème c'est que dans la fonction decode_int il n'y a pas de return (je pense que ça doit être return val; )
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
//FONCTION DE VERIFICATION DE TAILLE D UNE CHAINE
//il retourne 1 si la taille est egale a celle du type sinon 0
int verif ( char*s,int l)
{
if (l==(strlen(s)))
return 1;
else
return 0;
}
//FONCTION DE VERIFICATION DE LA TAILLE POUR LES TYPES CHAINE DE CARACTERE
int verif_char( char *s)
{if ((strlen(s))%8==0)
return 1;
else
return 0;
}
//FONCTION QUI PERMET D'EXTRAIRE UNE CHAINE DE CARACTERE
char *extract ( char*s,int deb,int fin){
char *ch=NULL;
int i;
if ((s!=NULL)&&(deb<fin)){
ch=malloc(sizeof(*ch)*(fin-deb+2));
if (ch!=NULL)
{for(i=deb;i<=fin;i++)
{ch[i-deb]=s[i];
}
ch[i-deb]='\0';
}
else
printf("erreur");
return(ch);
}
}
//FONCTION QUI DECODE UN ENTIER
int decode_int(char*s){
int val=0,i,l=strlen(s);
i=l-1;
while(i>=0){
if (s[i]==1)
{val=val+pow(2,i-l+1);
i++;}
i++;
}
}
//FONCTION QUI DECODE UNE CHAINE EN ENTIER DECIMAL NON SIGNE
int decode_uns(char *s)
{ int i,val,l=strlen(s);
char c;
for(i=l-1;i>=0;i++)
{ if (s[i]!=0)
val=val+pow(2,i-l+1);
}
}
//FONCTION QUI DECODE UNE CHAINE EN ENTIER DECIMAL SIGNE CPLMENT A 2
char *decode_cpl2 (char *s){
int j,i,l=strlen(s),val=0;
char *c,*c1;
c=(char*)malloc(sizeof(char));
c1=(char*)malloc(sizeof(char));
while(s!=NULL){
if (s[0]==1){
c="-";
val= decode_uns(s);
strcat(c,"val");
}
{ c="+";
i=l-1;
while((i>0)&&(s[i]==0)){i++;}
val+=pow(2,i-l+1);
for(j=i-1;j>0;j++){
if(s[i]==0)
val+=pow(2,i-l+1);
}
strcat(c,"val");
}
}
return(c);
}
//FONCTION QUI DECODE UNE CHAINE E ENTIER DECIMAL SIGNE CPLMENT 1
char *decode_cpl1(char*s){
int i,val=0,l=strlen(s);
char*c;
c=(char*)malloc(sizeof(char));
if (s[0]==1)
{ c="+";
i=l-1;
while(i>0){
if(s[i]==0)
{
val+=pow(2,i-l+1);
}
i++;
}
strcat(c,"val");
}
{
c="-";
strcat(c,"val");
}
return(c);
}
//FONCTION QUI DECODE UNE CHAINE EN REEL
char *decode_real1(char*s){
char*c1,*c2,*c3;
c1=(char*)malloc(sizeof(char));
c2=(char*)malloc(sizeof(char));
c3=(char*)malloc(sizeof(char));
int l=strlen(s),i=0,j,k,e,m;
if (s[i]==0){
c1="+";
}
c1="-";
j=2;k=9;
c2=extract(s,j,k);
e=decode_int(c2);
strcat(c1,c2);
if (s[10]==0)
{c3="+";}c3="-";
strcat(c1,c3);
for(i=11;i<=32;i++){
m+=pow(2,-i-1);}
strcat(c1,"m");
return(c1);
}
//FONCTION QUI DECODE UNE CHAINE EN CARACTERE
char decode_char(char*s) {
int n,val;
char c;
val=decode_int(s);
c=val;
return(val);
}
//FONCTION QUI DECODE UNE CHAINE EN CHAINE DE CARATERE
char *decode_chaine(char *s){
int i=0,j=7,val,l=strlen(s);
char*c1,c2,c3,*c4;
c4=(char*)malloc(sizeof(char));
c1=extract(s,i,j);
c2=decode_char(c1);
c4="c2";
while ((i<j)&&(j<l))
{ i+=8;
j+=8;
c1=extract(s,i,j);
c3=decode_char(s);
strcat(c4,"c3");
}
return(c4);
}
//FONCTION QUI DECODE UN FLOTTANT 2
int main(){
char*sh,*type,*c,c1;
int i,j,k,l,v,n;
printf("\t u:pour les entiers non signés\n\t d:pour les entiers decimaux signe a cplment a 2 \n\t b:pour les entiers decimaux signes cplmen a 1\n\t f:pour les flottants\n\t l:pour les flottants avec exposant biaise\n\t s:pour les chaines de caractere\n\t c pour les caracteres\n\n");
printf("\n ...pour le decodage taper 1....pour quitter taper 2\n");
scanf("%d",&n);
if(n==1){
type=(char*)malloc(sizeof(char));
c=(char*)malloc(sizeof(char));
sh=(char*)malloc(sizeof(char));
printf("\t ENTRER VOTRE TYPE:");
do
{scanf("%s",type);}
while(strlen(type)==2);
printf("\nENTRER VOTRE CHAINE ");
do{
scanf("%s",sh); k++;
}
while ((i<strlen(type))&&((sh[k]==0)||(sh[k]==1)));
//printf("la chaine est %s",sh);
if(type=="u"){
l=sizeof(unsigned int)*8;
v=verif (sh,l);
// printf("alors la %d",v);
if(v==1){
i=decode_int(sh);
printf("le code est %d\n:",i);
}
printf("erreur dans le code");
}
else
if(type=="b"){
l=sizeof(int)*8;
v=verif (sh,l);
if(v==1){
c=decode_cpl1(sh);
printf("le code est %s\n:",c);
}
printf("erreur dans le code");
}
else
if(type="d"){
l=sizeof(unsigned int)*8;
v=verif (sh,l);
printf("je suis %d",v);
if(v==1){
c=decode_cpl2(sh);
printf("le code est %s\n:",c);
}
printf("erreur dans le code");
}
else
if (type=="c"){
l=sizeof(char)*8;
v=verif (sh,l);
if(v==1){
c1=decode_char(sh);
printf("le code est %c\n:",c1);
}
printf("erreur dans le code");
}
else
if (type=="s"){
v=verif_char(sh);
if(v==1){
c=decode_chaine(sh);
printf("le code est %s\n:",c);
}
printf("erreur dans le code");
}
return 1;
}
exit(0);
getch();
getch();
}