C中的阵列神威尼哥人

时间:2015-05-19 04:26:51

标签: python c arrays

我必须制作一维一维的细胞自动机并在C中实现其任何规则。

在进入C之前(不是我说实话),我只使用固定数组在python中编码,只使用for和while循环(使其直接进入端口)。我的问题是,在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_Regla,基本上,以二进制计数到0到7);然后我继续迭代向量,如果找到匹配规则,将它附加到空数组(Aux),将该数组写入文件,然后使我的旧vector = 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数组的内容复制到Array数组时,会出现问题。它搞砸了。

我对代码进行了双重和三重检查,但我看不到任何错误。我甚至没有分配内存,我正在使用静态数组。我很无能为力。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

您至少有一个缓冲区溢出:

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

bufer需要大小为4。

答案 1 :(得分:3)

strncpy()将在第一个nul字节(值0)或n个字节(在这种情况下为ancho)之后停止。它可能首先击中了nul。请改用memcpy()