社区
语言基础/算法/系统设计
帖子详情
如何使用 Pointer 修改 string
s11ss
2009-11-08 02:10:45
procedure TForm1.Button1Click(Sender: TObject);
var
p: Pointer;
s: string;
begin
s := 'a23';
p := PChar(s);
Byte(p^) := Ord('1');//想要实现 s[1] := '1',但这里报错
ShowMessage(s);
end;
...全文
106
8
打赏
收藏
如何使用 Pointer 修改 string
procedure TForm1.Button1Click(Sender: TObject); var p: Pointer; s: string; begin s := 'a23'; p := PChar(s); Byte(p^) := Ord('1');//想要实现 s[1] := '1',但这里报错 ShowMessage(s); end;
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Seamour
2009-11-08
打赏
举报
回复
[Quote=引用 6 楼 s11ss 的回复:]
那为什么 s[1] := '1' 可以呢?
[/Quote]
看反汇编就知道了,str[N] 为 l-value 时会调用 system._UniqueString*,把常量字符串变成了变量。所以 str[N] 为 l-value 时效率非常低
mdejtod
2009-11-08
打赏
举报
回复
S是变量,在任何情况下你都可以直接修改,但是
p := PChar(s);
这之后,P就是一个常量指针,常量指针所指的内容不可被修改,但是指针的指向地址可以修改
而指针常量的话,则是指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
var
p: PChar;
s: string;
begin
s := 'a23';
p := PChar(s);
GetMem(p,Length(S));
CopyMemory(p,PChar(s),Length(s));
P[0] := '1';
s := p;
ShowMessage(s[1]);
FreeMem(p,Length(s));
end;
搞不明白楼主为什么要绕一个圈子来实现这功能。。。。。
希望我没搞错,水平有限。。。
s11ss
2009-11-08
打赏
举报
回复
那为什么 s[1] := '1' 可以呢?[Quote=引用 5 楼 seamour 的回复:]
s指向的是常量字符串,当然不能直接写了
[/Quote]
Seamour
2009-11-08
打赏
举报
回复
s指向的是常量字符串,当然不能直接写了
s11ss
2009-11-08
打赏
举报
回复
谢谢,不过不管用啊 :([Quote=引用 3 楼 huoxin8226 的回复:]
p := PChar(s)+1;
PByte(p)^:= Ord('1');
试试看
[/Quote]
huoxin8226
2009-11-08
打赏
举报
回复
p := PChar(s)+1;
PByte(p)^:= Ord('1');
试试看
s11ss
2009-11-08
打赏
举报
回复
[Quote=引用 1 楼 preserve 的回复:]
是编译通不过么?
Byte(p^)换成PByte(p)^试试
[/Quote]编译能通过,换成这个PByte(p)^以后编译也能通过,但运行时还是报错,还是 Access Violation.
preserve
2009-11-08
打赏
举报
回复
是编译通不过么?
Byte(p^)换成PByte(p)^试试
java高级用法之:JNA类型映射应该注意的问题
文章目录简介
String
Buff
er
s,Memory,数组和
Point
er
可变参数总结 简介 JNA提供JAVA类型和native类型的映射关系,但是这一种映射关系只是一个大概的映射,我们在实际的应用中还有很多需要注意的事项,本文将会为大家...
free(): invalid
point
er
arm环境O2优化下
string
free异常分析
free(): invalid
point
er
arm环境O2优化下
string
free异常分析
C语言中指针, 数组和字符串(
Point
er
, Array and
String
in C Programming Language)
A
point
er
is a variable that contains the address of a variable")[10](p93). 例如:int* pa;其中pa是一个指向整型数的指针,整型数是pa的基础类型(ref
er
enced type) . 常量指针的声...
go
使用
unsafe包实现
string
和[]byte的转换
特性通过无类型指针转换内存分配分配新的内存无额外分配,共享底层数据数据安全数据独立,
修改
互不影响
修改
返回的 []byte 会影响原字符串性能较低:需要分配内存和复制数据较高:直接操作底层指针易读性和维护简单易...
String
,
String
Buff
er
与
String
Build
er
的区别
一、Java
String
类——
String
字符串常量 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了
String
类来创建和操作字符串。 需要注意的是,
String
的值是不可变的,这就导致每次对
String
的...
语言基础/算法/系统设计
16,746
社区成员
33,239
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章