我想通过for循环从address中打印一个字符串。下面是我写的代码,但是它在正常运行和调试时给出了不同的结果。
如何按str的地址顺序打印str的每个字符。
请帮帮我。谢谢你这么多hhh <3
这是我的代码!!!
package main
import (
"fmt"
"unsafe"
)
func main() {
str := "Hello, World!"
startAddr := uintptr(unsafe.Pointer(&str)) // Get the address of the string variable
for i := 0; i < len(str); i++ {
ptr := (*byte)(unsafe.Pointer(startAddr + uintptr(i))) // Calculate the pointer address
fmt.Printf("%c", *ptr) // Dereference the pointer to get the character
}
}
字符串
1条答案
按热度按时间vuktfyat1#
您的尝试不起作用的原因是因为
&str
返回字符串 header 的地址,而不是字符串 data 的地址。如果你想要字符串数据的地址,你需要先将&str
转换成字符串头,然后通过头访问数据。您可以使用声明的reflect.StringHeader
来实现这一点,只要确保您阅读了它的文档并理解了它的内容。字符串
https://go.dev/play/p/kniSJyM7DX5