因此,就像在python列表中一样,我想try 并使用c实现(我对c编程是新手). 这是我的代码

// File name:- list.c

#include <stdio.h>
#include <stdlib.h>
#include "l.h"

int main() 
{
    int myNumbers[] = {25, 50, 75, 100};
    // int length = len(myNumbers);
    push(myNumbers, 200, len(myNumbers));
    for(int i = 0; myNumbers[i]; i++){
        printf("array[%d] = %li\n", i, myNumbers[i]);
    };
    len(myNumbers);

    return 0;
}


// File name:- l.c

#include "l.h"
#include <stdio.h>

int len(int arr[])
{
    int i;
    for(i = 0; arr[i]!='\0'; i++){
        continue;
    };
    printf("Length is: %d\n", i);
    return i;
}

void push(int list[], int value, int length)
{
    // int length = len(list);
    list[length] = value;
}

上面的代码确实给了我预期的结果,即

Length is: 4
array[0] = 25
array[1] = 50
array[2] = 75
array[3] = 100
array[4] = 200
Length is: 5

而当数组中的值为int myNumbers[] = {25, 50, 75, 100, 125};或大于4的值时...

结果被赋予意外的随机值,例如:-

Length is: 5
array[0] = 25
array[1] = 50
array[2] = 75
array[3] = 100
array[4] = 125
array[5] = 200
array[6] = 2782528512
array[7] = 1952226512
array[8] = 1
Length is: 9

如何解决此问题? 我甚至try 过直接传递长度,甚至在不传递长度的情况下调用函数,但都不起作用…… 我判断了代码是否有任何逻辑错误,但没有找到任何..

我希望这是我的结果.

Length is: 5
array[0] = 25
array[1] = 50
array[2] = 75
array[3] = 100
array[4] = 125
array[5] = 200
Length is: 6

推荐答案

C不会自动以零结束数组(字符串除外).如果您想要一个零来标记数组的结尾,则必须将其放在那里.

C不会自动增加array.您的push routine 不会在数组中为新元素腾出空间.它会损坏您的程序.

要在这样的列表中添加数字,您可以声明myNumbers有很多空间,就像int myNumbers[100] = {25, 50, 75, 100, 0};一样,为myNumbers个元素预留空间,并用零标记前几个元素的末尾.随着您了解更多关于C的知识,您将了解管理内存的其他方法.

C++相关问答推荐

为什么静态说明符为内联函数生成外部定义?

不同到达时间的轮询实现

为什么在4.9.37版的内核中,kfio还需要smp_wmb呢?

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

Ruby C Api处理异常

Clang警告称,`ffi_type`与`sizeof`不兼容

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

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

cairo 剪辑区域是否存在多个矩形?

使用nmake for程序比Hello World稍微复杂一些

不同原型的危险C函数是可能的

';\n&39;和';\r&39;中的';\n&39;之间有什么关系?

pthread_create的用法

在C程序中使用Beaglebone Black UART的问题

错误:字符串在C中获得意外输出

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

在Ubuntu上使用库部署C程序的最佳实践

在分配内存后使用指针是未定义的行为吗?

共享内存未授予父进程权限

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?