我必须制作一个一维元胞自动机,并用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数组的内容复制到数组中时,问题就出现了。搞砸了。你知道吗
我已经仔细检查了代码,没有发现任何错误。我甚至没有分配内存,我在使用静态数组。我不知所措。感谢您的帮助。你知道吗
至少有一个缓冲区溢出:
bufer
大小必须为4。你知道吗strncpy()
将在第一个nul字节(值0)或在n
字节之后停止(在本例中为ancho
)。它可能先击中核弹。改用memcpy()
。你知道吗相关问题 更多 >
编程相关推荐