MIPS32 read_string 未知长度
MIPS32 read_string of unknown length
我一直在试验 read_string 系统调用($a0 中的缓冲区,$a1 中的长度)并发现如果我输入的内容超过 length 个字符,只有 length - 1 个字符将写入内存。
当然,我的问题是:除了逐字节读取和在堆栈中动态分配内存之外,还有什么方法可以读取未知大小的字符串吗?
我没有在文档(或任何地方)中找到任何关于此的内容。
Is there a way to read a string of unknown size apart from reading byte-by-byte
不,如果您想读取字符串,无论是不需要回车 return 终止符 - 还是 - 不静态选择缓冲区长度,您都必须单独读取字符。
and dynamically allocating memory in stack?
堆栈是一种方式,但由于它向低地址增长,而字符串 "grow" 向高地址增长,所以在知道长度后需要像复制一样进行一些调整。
堆是另一种方式;您需要以任何您想要的增量不断增加堆,但它的增长方向与字符串相同。堆为您提供了 sbrk 功能(扩展我的地址 space,而不是 malloc/free,因此当您使用完内存后,您可以重新使用自己但不能 "free" 就这样)。
我一直在试验 read_string 系统调用($a0 中的缓冲区,$a1 中的长度)并发现如果我输入的内容超过 length 个字符,只有 length - 1 个字符将写入内存。
当然,我的问题是:除了逐字节读取和在堆栈中动态分配内存之外,还有什么方法可以读取未知大小的字符串吗? 我没有在文档(或任何地方)中找到任何关于此的内容。
Is there a way to read a string of unknown size apart from reading byte-by-byte
不,如果您想读取字符串,无论是不需要回车 return 终止符 - 还是 - 不静态选择缓冲区长度,您都必须单独读取字符。
and dynamically allocating memory in stack?
堆栈是一种方式,但由于它向低地址增长,而字符串 "grow" 向高地址增长,所以在知道长度后需要像复制一样进行一些调整。
堆是另一种方式;您需要以任何您想要的增量不断增加堆,但它的增长方向与字符串相同。堆为您提供了 sbrk 功能(扩展我的地址 space,而不是 malloc/free,因此当您使用完内存后,您可以重新使用自己但不能 "free" 就这样)。