C中固定大小的缓冲区数组

时间:2017-10-22 05:51:58

标签: c arrays

我试着写一个程序,其中缓冲区应该是固定大小。修正后我的意思是上限是固定的。程序应该将第一个元素移位数组向左移除1,将新元素移除到缓冲区数组的末尾。

实施例:      输出应该是:1234 2345 3456其中最后一位是输入

这就是我试过的

#! /usr/bin/python
#
# From https://stackoverflow.com/questions/797771/python-protected-attributes
from __future__ import print_function
import sys

class Stock(object):

    def __init__(self, stockName):

        # '_' is just a convention and does nothing
        self.__stockName  = stockName   # private now


    @property # when you do Stock.name, it will call this function
    def name(self):
        print("In the getter, __stockName is %s" % self.__stockName, file=sys.stderr)
        return self.__stockName

    @name.setter # when you do Stock.name = x, it will call this function
    def name(self, name):
        print("In the setter, name is %s will become %s" % ( self.__stockName, name), file=sys.stderr)
        self.__stockName = name

if __name__ == "__main__":
    myStock = Stock("stock111")

    try:
        myStock.__stockName  # It is private. You can't access it.
    except AttributeError as a:
        print("As expect, raised AttributeError", str(a), file=sys.stderr )
    else:
        print("myStock.__stockName did did *not* raise an AttributeError exception")


    #Now you can myStock.name
    myStock.name = "Murphy"
    N = float(input("input to your stock: " + str(myStock.name)+" ? "))
    print("The value of %s is %s" % (myStock.name, N) )

1 个答案:

答案 0 :(得分:1)

你的程序中的第一个问题是这个陈述:

scanf("%c",&ch);

当您输入字符并按“Enter”键时,按“Enter”键后,'\n'字符仍然留在输入流中,下一次调用scanf,在您的无限{ {1}}循环将使用它,ch的下一个值将是while个字符。

要解决此问题,请在格式字符串中的转换说明符前添加一个空格:

\n

第二个问题是这句话:

scanf(" %c",&ch);

这在逻辑上是不正确的。

由于memmove(&buffer[idxToDel], &buffer[idxToDel + 1], strlen(buffer) - idxToDel); 值为0,因此idxToDel会尝试将memmove(= 4)字节从源strlen(buffer) - 0移至目标&buffer[0 + 1](衰败到&buffer[0])。但在你的情况下,你只需要移动3个字符。

buffer函数不会检查源中的任何终止空字符 - 它总是复制完整的字节数。

所以,你可以这样做:

memmove()