各位大大,我想问一下pascal指针变量赋值的问题:
1.我有条数据是这样的:12 34 57 639 Alfred Lincoln: 8,我定义了2个type用来放数据:
type Field = packed array[1..33] of char;
type employee = record                           
        state: Integer;
        plant: Integer;
        dept: Integer;
        empid: Integer;
        count: Integer;
        name: Field;
     end; 
有个指针:type ptr = ^ employee; 
var p: array[1..n] of ptr; 
文件写出: for j:=1 to 33 do
               begin
                    {while not(p[1]^.name[j] in ['a'..'z','A'..'Z']) do
                        p[1]^.name[j]:=#32 ;}
                    write(fileout,p[1]^.name[j]);
               end; 
我排过序
结果是:12    34   56   789     4 George Carter­­ºð­ºð­ºð­ºðº, 名字后面有乱码。、
我想把这些乱码去掉,想用空格代替,就用了上面注释的内容,编译没问题,但结果出不来。
把 p[1]^.name[j]:=#32 ;改成 p[1]^.name[j]:='' ;编译会报错,说 got Constant string expected Char.
我不知道怎么弄了,各位大大能帮一下吗?

解决方案 »

  1.   

    先填充为0,那么就可以了,使用前先SetLength( name,Length(name),0)
      

  2.   

    先把指针指向的值清0,fillchar试试
      

  3.   

    先初始化var
      i:integer;
      p: array[1..10] of ptr;
    begin
      for i:=low(p) to high(p) do
      begin
        new(P[i]);
        Fillchar(p[i]^.name,sizeof(p[i]^.name),#0);   //name數組初組化
        //其它變量初始化
      end;
    end;
      

  4.   

    单纯地看待编译问题的话,把 p[1]^.name[j]:=#32 ;改成 p[1]^.name[j]:='' 编译出错,
    改成
    p[1]^.name[j] := #0;即可
      

  5.   

    5楼的方法我也用过,但不行,其他各位大大的都挺好的,但kaikai_kk 大大给了具体的方法,所以就给kaikai_kk 分了,谢谢大家了。
      

  6.   

    employee 的 name 域在使用前,要先用#0填充,例如:FillChar( p[i]^.name,33,#0);然后才往里放数据,write的时候,也用不着逐个来,write(fileout,string(trim(p[1]^.name)));一次搞定。另外,请留意,使用 packed 会影响速度,还要注意兼容。