怎么实现这一句C语言的效果?(169)

冰力不足

New Member
Member
#1
void __fastcall TForm1::Button1Click(TObject *Sender){ char BLbuf[255];
char *s;
char *sa[5];
s = "yynnbbmm";
sa[0] = s;
// 把字符串s的内容赋值给数组的第一个sa[0] sprintf(BLbuf, "%s", sa[0]);
Memo1->Lines->Add(BLbuf);
// sa[0] 显示 yynnbbm s+=3;
// 指针向后移动3 *s = '/0';
// 把当前指针指向的字符修改为结束符号 '/0' sprintf(BLbuf, "%s", sa[0]);
Memo1->Lines->Add(BLbuf);
// sa[0] 显示 yyn}procedure TForm1.Button1Click(Sender: TObject);var s: PChar;
sa: Array[0..4] of PChar;
begin
s := 'yynnbbmm';
sa[0] := s;
Memo1.Lines.Add(sa[0]);
// sa[0] 显示 yynnbbm inc(s, 3);
s := #0;
Memo1.Lines.Add(sa[0]);
// sa[0] 显示 yynnbbmend;
怎么实现象C那样 通过这一句 *s = '/0';
把sa[0]显示的结果由 yynnbbm 变成 yyn也就是说, 在delphi中, 怎么移动指针并且修改指针指向地址的一个字符?致谢!
 

dhszxh

New Member
Member
#2
欢迎加入:89862412c#讨论群!刚开的!我看其它好多群都满了,所以自己建了一个,希望和大家一起学习进步!
 

冰力不足

New Member
Member
#6
procedure TForm1.Button3Click(Sender: TObject);var s: PChar;
sa: Array[0..4] of PChar;
begin
s := 'yynnbbmm';
sa[0] := s;
//Memo1.Lines.Add(sa[0]);
Memo1.Lines.Add(format('@s=%p s=%s s^=%s', [@s, s, s^]));
inc(s, 3);
//s := Pointer(Integer(s) + 1);
//s := #0;
Memo1.Lines.Add(format('@s=%p s=%s s^=%s', [@s, s, s^]));
s := #0;
Memo1.Lines.Add(format('@s=%p s=%s s^=%s', [@s, s, s^]));
//Memo1.Lines.Add(sa[0]);
end;
显示结果:mad:s=0012F628 s=yynnbbmm s^=y@s=0012F628 s=nbbmm s^=n@s=0012F628 s= s^=指针地址咋不变?
 

eachbuilder

New Member
Member
#7
以下两法皆可:procedure TForm1.Button1Click(Sender: TObject);var S: string;
begin
S := 'yynnbbmm';
Memo1.Lines.Add(S);
// 显示 yynnbbm SetLength(S, 3);
Memo1.Lines.Add(S);// 显示 yynend;
procedure TForm1.Button2Click(Sender: TObject);var sa: array[0..255] of Char;
begin
StrPCopy(@sa[0], 'yynnbbmm');
Memo1.Lines.Add(StrPas(@sa));
// 显示 yynnbbm sa[3] := #0;
Memo1.Lines.Add(StrPas(@sa));
// 显示 yynend;