-1

我是 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]);
    }
};
4

2 回答 2

1

AC 字符串是一个char由 nul ( '\0'\) 元素终止的 s 数组。您的数组中缺少此终止符,因此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);
于 2013-08-03T14:34:49.977 回答
0

这个anwser在上面的anwser之后。我只提一个建议。

可能您可以通过.Initialized 来存储整数的一个数字,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';

于 2013-08-03T15:38:15.347 回答