我一直在尝试read_string syscall($ a0中的缓冲区,$ a1中的长度),发现如果我输入的字符数超过length个,则只有length-1字符将被写入内存。
[自然,我的问题是:除了逐字节读取并在堆栈中动态分配内存之外,还有什么方法可以读取未知大小的字符串?我没有在文档中找到任何与此相关的信息(或就此而言,在任何地方)。
除了逐字节读取之外,还有一种读取大小未知的字符串的方法
否,如果您想读取字符串,或者不需要回车终止符-或-无需静态选择缓冲区长度,则必须分别读取字符。
并在堆栈中动态分配内存?
堆栈是一种方法,但是由于堆栈向低位地址增长,并且字符串向高位地址“增长”,因此您需要进行一些调整,例如在知道长度后进行复制。
堆是另一种方式;您将需要以所需的任何增量不断增加堆,但是堆的增长方向与字符串的增长方向相同。堆为您提供了sbrk功能(扩展我的地址空间,而不是malloc / free,因此,当您完成内存使用后,您可以重用自己,但不能这样“释放”它)。