我目前正在为我的一门课做一个实验,涉及父进程和子进程之间的共享内存。数据由子进程生成,并写入内存。然后父进程打印内存的内容。我的问题是,我似乎无法获得数据点之间的适当间距。用于生成数据的算法Collatz猜想,如果n为偶数,则为n = n/2,如果n是奇数,n = 3 * n +1。所以输入8会生成序列8 4 2 1,但我一直得到"8421"或"8421"或"8421"等。
我尝试过在父对象(printf
)和子对象(sprintf
)中放置空格的多种组合。
sprintf(ptr, "%d", n);
sprintf(ptr, "%d ", n);
sprintf(ptr, " %d", n);
sprintf(ptr, " %d ", n);
在父代中
x一个一个一个一个x一个一个二个x
2条答案
按热度按时间y53ybaqx1#
问题是如何添加到
ptr
变量中。将a
设置为(char*) &n
将使a
指向int值,并且由于int值小于256(内存字节),因此它将被读取为1个字符,并以长度1读取。要解决这个问题,你应该使用另一种添加指针的方法。我的建议是用下面的代码替换writing to buffer部分
如果您不希望使用spritnf的返回值,也可以执行以下操作:
bxpogfeg2#
注意,您只向ptr添加了数字的长度,而不是整个字符串的长度。
变更:
致: