如何将uintptr类型转换为*string类型?转换失败求助
uintptr 转 *string 的正确实现方式
核心问题梳理
你之前的尝试都偏离了正确方向:要么混淆了值类型与指针类型的赋值规则,要么错误地将uintptr的数值本身转成了单字符字符串,而非把它作为内存地址解析为指向字符串的指针。
错误原因拆解
y = string(x):string(x)生成的是string值,但y是*string指针类型,类型不匹配,直接赋值必然报错。y = *string(x):string(x)是字符串值,只有指针类型才能被解引用(*操作),对值用解引用语法完全不符合Go的语法规则。*y = string(x):这里的string(x)是把uintptr的数值当作Unicode码点转成单个字符,既不是解析地址指向的字符串内容,也不是把数值转成字符串形式的地址,因此触发语法提示。
正确解决方案
根据你描述的“uintptr代表文件目录地址”,这里的uintptr应该是存储文件目录字符串的内存地址数值,需要用unsafe包将其转换为*string:
import "unsafe" // x 是你的 uintptr 类型变量 y = (*string)(unsafe.Pointer(x))
如果你的需求是把uintptr的数值本身转成字符串,再获取它的指针(比如把地址的数字转成字符串),则用fmt.Sprint先转成字符串,再取地址:
import "fmt" s := fmt.Sprint(x) y = &s
注意事项
使用unsafe包会绕过Go的类型安全检查,只有你明确知道这个uintptr确实指向一个合法的string类型内存时,才应该用第一种方法,否则可能引发程序崩溃或内存错误。
内容的提问来源于stack exchange,提问作者gopher
相关产品推荐
相关产品推荐

