我有一个数组arr[] 然后我接受输入 然后,如果数字是9999,那么我将它们设为零,并将它们右移1索引,并将索引0声明为‘1’

if(carry == 1){
            arr[len]='0';
            for(i=len;i>0;i--){
                arr[i] = arr[i-1]; //arr[i+1] = arr[i] works fine
            }
            arr[0]='1';
        }

但问题是,如果我给指数9999,输出是10000m、10000k或10000o

我try 将arr[i]=arr[i-1];更改为arr[i+1]=arr[i],效果很好,但是由于长度比数组的最后一个字符多一个索引,为什么我必须使用i+1而不是1?

推荐答案

C中的字符串(也称为char*)应该以‘\0’(即ascii 0)结尾.输出数组时,循环在找到零值时停止.由于arr[len]不是0(‘\0’作为字符),而是‘0’(即ascii 48),所以循环不会在arr[len]停止.内存中的许多值都是0,但内存中的值通常是随机的,您没有设置.Arr[len]之后的下一个值可能不是0,但最终会有0,迭代将停止,或者遇到不属于您的内存(这会导致SEGFAULT).因此,为了获得可预测的结果,您应该为数组保留比可显示字符串多一个字符,并将最后一个字符设置为0. 还有.您应该从len-1开始并设置arr[i] = arr[i+1],因为现在,您正在覆盖刚刚在循环之前所做的赋值.请注意,您的数组的长度应为len+2,因为在索引len处有‘0’,在索引len+1处应该有‘\0’. 希望我能帮上忙:)

C++相关问答推荐

CC crate 示例不会与C函数链接

为什么listen()(在调用accept()之前)足以让应用程序完成3次握手?

理解没有返回语句的递归C函数的行为

为什么下面的递归基本情况在C中不起作用?

#If指令中未定义宏?

模拟shell并运行.sh文件

如何在C中打印包含扫描字符和整数的语句?

错误:包含文件时类型名称未知

C中的FREE函数正在触发断点

如何只获取字符串的第一个单词,然后将其与c中的另一个单词进行比较?

MacOS下C++的无阻塞键盘阅读

这段代码用于在C中以相反的顺序打印数组,但它不起作用

为什么这个分配做得不好呢?

如何使这个While循环在新行上结束

C:Assignment中的链表赋值从指针目标类型中丢弃‘const’限定符

用于计算位数和的递归C函数

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?如果是,是哪一个?

被调用方函数内部的C-Struct变量,它是指针还是无关紧要

按字典顺序打印具有给定字符的所有可能字符串

文件指针引起的C程序分段错误