You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Free Pascal字符单链表转字符串函数返回乱码问题求解

问题原因

乱码不是编码问题,是Pascal字符串操作规范错误和变量定义冲突导致的内存越界访问,具体有三个错误点:

  • 函数内重复定义了和返回值同名的变量:StringOf函数的VAR区额外声明了StringOf: STRING局部变量,覆盖了函数本身的返回值标识,最终返回的是未初始化的局部变量的垃圾值。
  • 字符串赋值方式错误:Pascal的短字符串初始化为空串s:=''后,仅下标0的位置有合法内存,直接对s[i](i>=1)赋值属于越界写内存,不会触发字符串长度自动更新,还会污染相邻内存数据。
  • 长度计算错误:3个字符遍历完成后循环变量i的值为4,直接赋值给s[0]相当于把字符串长度设为4,多出来的第4位是内存随机垃圾值,会随有效字符一起输出。

修复方案

调整StringOf函数的逻辑,使用Pascal标准的字符串拼接操作自动管理长度和内存,删除重复的变量定义:

FUNCTION StringOf(cl: CharListPtr): STRING;
VAR
  n: CharNodePtr;
  max: INTEGER;
  s: STRING;
BEGIN
  n := cl;
  max := 255;
  s := '';
  WHILE (n <> NIL) AND (Length(s) < max) DO BEGIN
    s := s + n^.ch;
    n := n^.next;
  END;
  StringOf := s;
END;

修改后运行测试用例将正常输出abc。

内容的提问来源于stack exchange,提问作者marie_antoinette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:06:00