我是C编程新手。我正在编写一个程序来通过在数组中表示整数来实现大整数。我把printf放在我主程序的各处,并发现strrev部分是造成问题的原因(我只把错误的部分放在这里而不是主程序。但是我无法弄清楚出了什么问题。任何人都可以帮忙我一样吗?
以下代码 -
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct integer
{
char store[200];
int length;
};
void printer2(struct integer x1);
int main()
{
struct integer x1;
x1.store[0]=1;
x1.store[1]=2;
x1.store[2]=3;
x1.store[3]=4;
x1.store[4]=5;
x1.length=5;
printer2(x1);
strrev(x1.store);
printer2(x1);
return 0;
}
void printer2(struct integer a1)
{
int j;
for (j=0;j<a1.length;j++)
{
printf("a1 %d is %d\n",j,a1.store[j]);
}
};
答案 0 :(得分:1)
C字符串是由nul(char
)元素终止的'\0'\
数组。您在数组中缺少此终结符,因此strrev
将一直读取,直到找到第一个零字节。或者你的程序崩溃了。
如果要将数组视为字符串,则需要向其添加一个nul终结符
x1.store[5]='\0';
正如Jongware所指出的,请注意,如果要将任何数组元素设置为0
,此方法将失败 - 这些将被误解为nul终止符。如果您要打印字符,您可能需要整数字符代码 - '0'
,'1'
等。
顺便说一句,注意像
这样的功能void printer2(struct integer a1)
传递a1
的完整副本。如果这不是故意的,你可以考虑传递调用者实例的地址
void printer2(const struct integer* a1)
使用地址运算符&
printer2(&x1);
答案 1 :(得分:0)
这个anwser是在上面的anwser之后。我只给出一个建议。
可以按char
存储整数位数。初始化为:
x1.store[0]='1';
x1.store[1]='2';
x1.store[2]='3';
x1.store[3]='4';
x1.store[4]='5';
x1.store[5]='\0'
x1.length=5;
使用整数位数时。使用int x1_store0 = x1.store[0] - '0';