斯特雷夫在C中表现得很奇怪

时间:2013-08-03 14:32:51

标签: c reverse

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

2 个答案:

答案 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';