mips - MIPS32 read_string 长度未知
问题描述
我一直在尝试使用read_string 系统调用($a0 中的缓冲区,$a1 中的长度)并发现如果我输入超过length个字符,则只会将length - 1 个字符写入内存。
自然,我的问题是:除了逐字节读取和在堆栈中动态分配内存之外,有没有办法读取未知大小的字符串?我在文档中(或任何地方,就此而言)没有找到任何关于此的内容。
解决方案
除了逐字节读取之外,有没有办法读取未知大小的字符串
不,如果您想读取字符串,或者不需要回车终止符 - 或者 - 不需要静态选择缓冲区长度,则必须单独读取字符。
并在堆栈中动态分配内存?
堆栈是一种方式,但由于它向低地址增长,而字符串向高地址“增长”,因此在知道长度后,您需要进行一些调整,例如复制。
堆是另一种方式;您需要以您想要的任何增量继续增长堆,但它的增长方向与字符串的增长方向相同。堆为您提供了 sbrk 功能(扩展我的地址空间,而不是 malloc/free,因此当您使用完内存后,您可以重用自己,但不能像这样“释放”它)。
推荐阅读
- java - 在 groovy / java 中递归解析 XML
- c# - 错误上传/下载文件到/从便携式设备使用
- angular - Angular 6 Uncaught ReferenceError:未定义缓冲区
- iis - 在 ASP.NET 中使用模拟 使用 .NET Framework 4.6.1 在 IIS 中托管
- sql - 合并oracle中表中的两行,除生效日期外,所有详细信息都相同
- c - LTTng:用户应用程序跟踪致命错误
- python - 烧瓶中的数据库迁移 - sqlalchemy
- visual-studio-code - VS Code 中的 Jython 设置
- javascript - 如何使用 HTML 中的 onBlur 从服务器调用烧瓶函数?
- linux - Rsyslog 错误消息 RHEL 7