C语言中的数组骗局

2024-09-29 05:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须制作一个一维元胞自动机,并用C语言实现它的任何规则

在进入C语言之前(老实说,这不是我的强项),我只使用固定数组和for和while循环(使其直接进入端口)在python中对其进行编码。我的问题是,在Python中,我有以下代码:

def bin(n):
    aux = 7
    bin = ''
    while aux>=0:
        if 2**aux <= n:            
            n-=2**aux
            bin += '1'
        else:
            bin+='0'
        aux-=1
    return list(bin)        

regla = bin(30)
print regla
ancho = 8
alto = 8
vector = []
valores_regla = ['111','110','101','100','011','010','001','000']

for i in range(ancho):
    vector.append('0')
vector[ancho/2]='1'

archivo = open('Imagen.pbm','w')
archivo.write('P1 '+str(ancho)+ ' ' + str(alto)+'\n')

aux = []
for y in range(alto):
    for x in range(len(vector)):
        i=x-1
        c=x
        d=x+1
        if x == 0:
            i=len(vector)-1
        if x == len(vector)-1:
            d=0
        for z in range(8):
            if vector[i]+vector[c]+vector[d] == valores_regla[z]:
                aux.append(regla[z])
    archivo.write( ''.join(aux) + '\n')
    vector = aux
    aux = []

print 'Terminado'
archivo.close()

基本上,我把整数转换成一个1字节的字符串二进制,然后把它的规则赋给一个数组(Valores\u Regla,基本上,二进制中的计数是0到7);然后我继续遍历这个向量,如果找到一个与规则匹配的,就把它附加到一个空数组(Aux),把这个数组写到一个文件中,然后让我的旧向量=Aux。你知道吗

这段代码工作得很好,可以在n=alto迭代中生成细胞自动机的.pbm图像。现在在C中,我几乎一行一行地移植了这段代码,它几乎可以正常工作。你知道吗

我的问题是当我尝试将新值“附加”到数组时。我还创建了一个Aux数组,填充了0。然后我做了同样的循环,检查了规则,如果它匹配,那么我将新的值赋给aux数组中等价的x位置。在这之前,它工作得非常完美:

#include <stdio.h>
#include <string.h>

char bufer[3];

bufer[0] =array[l];
bufer[1] = array[c];
bufer[2] = array[r];
bufer[3] = '\0';

当我试图将Aux数组的内容复制到数组中时,问题就出现了。搞砸了。你知道吗

我已经仔细检查了代码,没有发现任何错误。我甚至没有分配内存,我在使用静态数组。我不知所措。感谢您的帮助。你知道吗


Tags: 代码inforifbin规则range数组
2条回答

至少有一个缓冲区溢出:

char bufer[3];
bufer[3] = '\0';

bufer大小必须为4。你知道吗

strncpy()将在第一个nul字节(值0)或在n字节之后停止(在本例中为ancho)。它可能先击中核弹。改用memcpy()。你知道吗

相关问题 更多 >