gpt4 book ai didi

c - Strrev 在 C 语言中行为异常

转载 作者:行者123 更新时间:2023-11-30 19:22:11 25 4
gpt4 key购买 nike

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

最佳答案

C 字符串是一个以 nul ('\0'\) 元素结尾的 char 数组。您的数组中缺少此终止符,因此 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);

关于c - Strrev 在 C 语言中行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18033916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com