J'essaie de définir les valeurs de M et N dans ce programme à tout ce qui est analysé à partir d'une chaîne que ce programme C reçoit sur sa ligne de commande. Cependant, je reçois une erreur de segmentation chaque fois que je lance le code. Je suis nouveau au concept de pointeur en C, donc je sais que c'est quelque chose là-bas.Pourquoi ai-je une erreur de segmentation dans ce programme?
Le code est censé fonctionner comme suit:
./a.out -1,12
Prints:
1, 12
Merci pour toute aide!
#include <stdio.h>
#include <stdlib.h>
void getnumber(char *toTest, int *a, int *c);
int main (int argc, char *argv[])
{
int a, c, curr;
a = 1;
c = 1;
curr = 1;
if (argv[1][0] == '-')
{
curr = 2;
getMandNValues(argv[1], &a, &c);
}
printf("%d, %d\n", a, c);
return 0;
}
void getMandNValues(char *src, int *a, int *c)
{
char aString[sizeof src];
char bString[sizeof src];
int i = 0;
while((aString[i] = &src[i+1]) != ',')
++i;
aString[i] = '\0';
int j = 0;
while((bString[j] = &src[i + 2]) != '\0')
{
++j;
++i;
}
bString[j] = '\0';
*a = atoi(aString);
*c = atoi(bString);
}
La sortie du compilateur est:
/tmp/foo.c: In function ‘main’:
/tmp/foo.c:18: warning: passing argument 2 of ‘getMandNValues’ makes pointer from integer without a cast
/tmp/foo.c:18: warning: passing argument 3 of ‘getMandNValues’ makes pointer from integer without a cast
/tmp/foo.c: In function ‘getMandNValues’:
/tmp/foo.c:34: warning: assignment makes integer from pointer without a cast
/tmp/foo.c:41: warning: assignment makes integer from pointer without a cast
J'espère sincèrement que vous n'avez pas réellement indenté (ou plutôt n ot) tout votre code comme ça ... –
Quelqu'un devrait laisser un commentaire sur les longueurs de aString et bString. –
la taille de aString et bString sera toujours 4 dans votre code. Ils ne seront pas la longueur de la chaîne passée dans src. –