469,603 Members | 2,057 Online

52
hello everyone,

Well I tried to solve this one on my own but it seems i need your help again :\

I'm trying to write a program to add or subtract two large integers... easy enough..

Where i run into problems is working with pointers. Here's where i'm at right now.

I have a function that takes in the integers as strings and puts it into a struct

Expand|Select|Wrap|Line Numbers
1. //struct declaration
2. struct integer {
3.     int* digits;
4.     int size;
5. };
6. //function declaration
8.
so far this works fairly well... except when i try to print the digits as integers it gives me the ascii equivilent number (like 54 for 1 or something)

then i have a function to add the two large integers, and this is where i'm currently stuck

Expand|Select|Wrap|Line Numbers
1. // function code
2. struct integer* add(struct integer *p, struct integer *q){
3.        int *first, *second, carry, i, length;
4.        struct integer* final;
5.        carry = 0;
6.        if(p[0].size > q[0].size)
7.           length = p[0].size;
8.        else
9.           length = q[0].size;
10.        for(i=0;i<length;i++){
11.           if(p[0].digits[i] == "\0"){
12.              //[WARNING] comparison between pointer and integer
13.              first = 0;
14.           else
15.              *first = p[0].digits[i];
16.           if(q[0].digits[i] == "\0")
17.              //[WARNING] comparison between pointer and integer
18.              second = 0;
19.           else
20.              *second = q[0].digits[i];
21.           final[0].digits[i] = *first + *second + carry;
22.           if(final[0].digits[i] >= 10){
23.              final[0].digits[i] = final[0].digits[i] - 10;
24.              carry = 1;
25.           }
26.           else
27.              carry = 0;
28.           }
29.
30. }
31.
compiling this gives me 2 warning on the lines above comments in code above.
running it will give an access violation and crash the program.

I'm not sure where i'm going wrong but i'm sure it has something to do with my use of pointers.

Any help will be greatly appreciated!
May 27 '08 #1
4 5702
Laharl
849 Expert 512MB
Using double quotes there means you're comparing it to a string literal. Use single quotes for the character literal you want.
May 27 '08 #2
Shisou
52
ahhhh, that got rid of those pesky warnings :) thank you...

however i still get an access violation, and i believe it is at the following line

Expand|Select|Wrap|Line Numbers
1. *first = p[0].digits[i];
2.
atleast when i tried to step through this line in my debugger the error popped up :\
May 27 '08 #3
oler1s
671 Expert 512MB
Expand|Select|Wrap|Line Numbers
1. int *first
Why is first a pointer to an int? If you have described a valid reason for it to be a pointer, where does it point?
May 28 '08 #4
Shisou
52
I didn't really have a reason for first and second to be pointers... except that it was the only way to get some kind of functionality out of the program... but now that i have the strings converted to integers I think i should be able to use just a regular int.

I'm going to keep working this part alone and see where i can get, if I need anything else I'll be sure to post here again :)

Thanks again!
May 28 '08 #5