假设你有一个像这样的字符串:
char* a="01234"
Run Code Online (Sandbox Code Playgroud)
让&a = 0000,&(a + 1)= 0001,&(a + 2)= 0002,等等,如果在0007处已经为另一个变量分配了一些内存会发生什么,并且您尝试将a调整为更大尺寸(a ="0123456789")?是否会移动到可以容纳更大字符串的新位置,或者0007中的数据是否会被覆盖?
编辑:
当他们说不允许调整C风格的字符串时,我不明白人们的意思.
char* a="01234"
cout << &a; //Prints 00FF1360
cout << a; //Prints 01234
a="0123456789"
cout << &a; //Still prints 00FF1360
cout << a; //Prints "0123456789"
Run Code Online (Sandbox Code Playgroud)
当我重新分配它时,指针a根本没有改变.似乎原始字符串"01234"刚刚被销毁,"0123456789"在同一位置取代了它.
没关系,我正在打印指针的位置而不是它指向的位置.作为一个附带问题,有没有人知道如何在不打印字符串的情况下打印字符指针的值?
这样的c风格字符串只是数组.通过malloc分配的数组可以使用realloc调整大小,但那些分配的数组不是.访问字符串外部的内存是访问可能由其他内容使用的内存,或者是未初始化的内存,或者是其他内容.