今天遇到了一个坑,记录一下
1 | string nameSeed = "ABCDE"; |
我的期望输出是 hhhA
,但是输出为空
原因是在C++中,字符串面量(例如"hhh"
)实际上是字符数组,表现为指向字符的指针。
比如,假设"hhh"
在内存中表示如下:
1 | 地址 内容 |
"hhh"
这个字面量实际上是指向地址 0x100
的指针
当做类似 "hhh" + nameSeed[0]
的操作时,实际上C++会把"hhh"
视作一个指针,然后尝试对它进行加法操作。加法操作会对这个指针进行位移。nameSeed[0]
返回的是字符'A'
,它的ASCII码值是65
,意味着指针位移65
个字符。这会导致指针指向一个完全不同的内存位置,超出原始字符串的范围。结果是指向了内存中随机的地址,而这个位置通常不包含任何有意义的数据,导致了程序行为异常。