de telles choses sont mieux fait avec des chaînes au lieu des entiers.
J'ai pris la liberté et simplifié votre logique un peu, par exemple: j'ai dépouillé la boucle. (Keep it simple en premier et quand que fonctionne bien: aller sur)
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <limits.h>
//#include <memory.h>
int main(void)
{
size_t n;
int err;
char format[16] = {'\0'};
// check the bitsize to evaluate how much memory we need
// for teh numebr of decimal digits in an int
n = sizeof(int) * CHAR_BIT;
// 2^32 = 4294967296 which are 10 characters plus EOS
if (n == 32) {
n = 11;
}
// 2^64 = 18446744073709551616 which are 20 characters plus EOS
else if (n == 64) {
n = 21;
}
// I wanted to keep it simple, so fail at <32 bit integers
else {
fprintf(stderr, "Unknown int-size %zu, please check\n", n);
return EXIT_FAILURE;
}
// we need to limit the maximum length for scanf() to n -1. This
// is not possible to do directly we need to build the format string manually
err = snprintf(format, sizeof(format), "%%%zus", n - 1);
if (err < 0) {
fprintf(stderr, "snprintf() failed wile preparing the format for scanf\n");
return EXIT_FAILURE;
}
// we need byte arrays, not integer arrays, hence 'char'.
// sizeof(char) is always 1 (one) by definition.
// BTW: don't cast malloc() in C (but do it in C++)
// calloc() sets the memory to 0 which is quite useful here
char *A1 = calloc(n, 1);
if (A1 == NULL) {
fprintf(stderr, "Failure to allocate %zu bytes for A1\n", n);
return EXIT_FAILURE;
}
char *A2 = calloc(n, 1);
if (A2 == NULL) {
fprintf(stderr, "Failure to allocate %zu bytes for A2\n", n);
return EXIT_FAILURE;
}
printf("enter A1 number\n");
// check return of scanf() (well, always check the returns of every
// function (with the accepted excepteion of printf())
errno = 0;
err = scanf(format, A1);
if (err != 1) {
if (err == EOF) {
fprintf(stderr, "The error %s occured while scanning for A1\n",
strerror(errno));
} else {
fprintf(stderr, "An error occured while scanning for A1\n");
}
return EXIT_FAILURE;
}
printf("enter A2 number\n");
err = scanf(format, A2);
errno = 0;
if (err != 1) {
if (err == EOF) {
fprintf(stderr, "The error %s occured while scanning for A1\n",
strerror(errno));
} else {
fprintf(stderr, "An error occured while scanning for A1\n");
}
return EXIT_FAILURE;
}
// it is memcpy(destination, source, number of bytes to be copied)
// Here we copy 2 bytes from A2 to A1 with some offsets, please adjust to your needs
// You will get into trouble if you don't check if your offsets are inside
// the allocated memories!
memcpy(A1 + 2, A2 + 1, 2);
printf("A1= %s\n", A1);
// if you want a binary number from it do something in the line of e.g.:
int binary_number = atoi(A1);
printf("A1 as an int = %d\n", binary_number);
free(A1);
free(A2);
return EXIT_SUCCESS;
}
Vous n'initialisez 'n'. – ForceBru
Un 'int' stocke tous les chiffres dans la même variable, et au format binaire. Vous ne pouvez pas indexer ou copier des chiffres décimaux en les indexant. –
Je ne sais pas comment vous avez obtenu '12322' de' 12345' et '222'. –