Why does the compiler throw garbage when adding character arrays?

Question:

#include<stdio.h>
#include<conio.h>
const int N = 5;
void main(void) {
unsigned int i = 0, A[N], B[N], C[N], c = 0;
while ((B[i] = getchar()) != '\n') {
    i = i + 1;
    printf("%5d", B[i]);
}


#include<stdio.h>
#include<conio.h>
const int N = 5;
void main(void) {
unsigned  char i = 0, A[N], B[N], C[N], c = 0;

while ((A[i] = getchar()) != '\n') {
    i = i + 1;
}

i = 0;

while ((B[i] = getchar()) != '\n') {
    printf("%5c", B[i++]);
}

for (i = 5; i > 0; i--) {
    C[c] = (A[i] + B[i]);
    c++;
}
printf("\n");

for (i = 0; i < c; i++) {
    printf("%5c", C[i]);
}
_getch();
}

Answer:

You need something like

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int add(char * dest, char * src1, char * src2, unsigned int n)
{
    dest[n] = 0;
    int carry = 0;
    for(int i = n-1; i >= 0; --i)
    {
        int op1 = (src1[i] == ' ') ? 0 : src1[i]-'0';
        int op2 = (src2[i] == ' ') ? 0 : src2[i]-'0';
        int res = op1 + op2 + carry;
        carry = 0;
        if (res > 9) { res -= 10; carry = 1; }
        dest[i] = res + '0';
    }
    for(char * c = dest; *c == '0'; ++c) *c = ' ';
    return carry;
}


int main(int argc, const char * argv[])
{
    char a[] = "12353163513251353123513451";
    char b[] = "98650987847947749794597949";
    char sum[sizeof(a)];

    int res = add(sum,a,b,sizeof(a)-1);
    printf("%s+\n%s=\n%s\nOverflow: %d\n\n",a,b,sum,res);

    strcpy(a,"12346541247246");
    strcpy(b,"       6537652");
    res = add(sum,a,b,strlen(a));
    printf("%s+\n%s=\n%s\nOverflow: %d\n\n",a,b,sum,res);

}
Scroll to Top