我从最后一个开始的长"n"中切下每一个数字,并使用for循环将它们分配到两个交替的数组x[]&y[]中.

我期望数组x[0]中的第一个int是非0 int&当我在循环中打印时,它会给出预期的结果,但是如果我在循环之后打印,那么第二个数组x[0]中的第一个int就是0吗?其他一切都按预期进行了吗?

    int x[8];
    int y[8];
    long n = 4003600000000014;
    int d = 0; 
    printf("x before: ");
    for (long j = n; j > 0; j /= 10)
    {
        y[d] = n % 10;
        n /= 10;
        x[d] = n % 10;
        // debug to print x
        printf("%d, ", x[d]);
        n /= 10;
        d++;
    }
    //debug print
    printf("\n");
    printf("x after: ");
    for(int fu = 0; fu < 8; fu++)
    {
        printf("%d, ", x[fu]);
    }
    printf("\n");

长"n"只是一个测试示例,它应该能够花费任何长时间

推荐答案

问题出在for循环

for (long j = n; j > 0; j /= 10)
{
    y[d] = n % 10;
    n /= 10;
    x[d] = n % 10;
    // debug to print x
    printf("%d, ", x[d]);
    n /= 10;
    d++;
}

它的迭代次数比数组xy的大小更多.

在for loop语句中,变量j在每次循环迭代中只被10除一次

for (long j = n; j > 0; j /= 10)
                        ^^^^^^^

但是在循环体中,变量n10除以两次

    y[d] = n % 10;
    n /= 10;
    ^^^^^^^^
    x[d] = n % 10;
    // debug to print x
    printf("%d, ", x[d]);
    n /= 10;
    ^^^^^^^
    d++;

结果,在for循环内存在对数组xy之外的存储器的访问.

您可以用以下方式重写循环

for (long j = n; j > 0; )
{
    y[d] = j % 10;
    j /= 10;
    x[d] = j % 10;
    // debug to print x
    printf("%d, ", x[d]);
    j /= 10;
    d++;
}

C++相关问答推荐

在使用GTK 4 Columnview列表模型时,如何为多列添加排序函数.C编码,Linux/GNOME环境

为什么GCC可以调用未定义的函数?

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

C:fopen是如何实现二进制模式和文本模式的?

为什么sscanf不能正确地从这个字符串格式中提取所有数字?

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

如何识别Linux中USB集线器(根)和连接到集线器(根设备)的设备(子设备)?

为什么将函数名括在括号中会禁用隐式声明?

&;(str[i])和(&;str)[i]有什么区别?

Cairo STM32MP1 cairo_Surface_WRITE_TO_PNG始终返回CAROLIO_STATUS_WRITE_ERROR

将数组插入数组

GetText不适用于包含国际字符的帐户名称

不带Malloc的链表

如何修复我的qsort()算法?它每次都给出不同的结果

如何在MSVC中使用intSafe.h函数?

我的代码可以与一个编译器一起使用,但不能与其他编译器一起使用

C 程序不显示任何输出,但它接受 CS50 Lab1 的输入问题

无法理解 fgets 输出

UEFI 应用程序中的计时器回调仅在 AMI BIOS 中挂起

C语言程序流程解释