首页 > 解决方案 > MIPS32 read_string 长度未知

问题描述

我一直在尝试使用read_string 系统调用($a0 中的缓冲区,$a1 中的长度)并发现如果我输入超过length个字符,则只会将length - 1 个字符写入内存。

自然,我的问题是:除了逐字节读取和在堆栈中动态分配内存之外,有没有办法读取未知大小的字符串?我在文档中(或任何地方,就此而言)没有找到任何关于此的内容。

标签: mipsmips32qtspim

解决方案


除了逐字节读取之外,有没有办法读取未知大小的字符串

不,如果您想读取字符串,或者不需要回车终止符 - 或者 - 不需要静态选择缓冲区长度,则必须单独读取字符。

并在堆栈中动态分配内存?

堆栈是一种方式,但由于它向低地址增长,而字符串向高地址“增长”,因此在知道长度后,您需要进行一些调整,例如复制。

堆是另一种方式;您需要以您想要的任何增量继续增长堆,但它的增长方向与字符串的增长方向相同。堆为您提供了 sbrk 功能(扩展我的地址空间,而不是 malloc/free,因此当您使用完内存后,您可以重用自己,但不能像这样“释放”它)。


推荐阅读