关于char *ch = "hello world!";的问题
char ch[] = "hello world!";//这个字符串hello world是存放在栈吗??
char *cp = "hello world!";//这个字符串hello world是存放在文字常量区吗??
为什么上面两种还不同??数组与指针不都是地址吗??请大虾说一说
程序员正常情况下,只能修改栈区的数据和堆区的数据,其他区是无法修改的,对吧?
那为什么我写的程序如下能通过
/* 编译器VS2010 */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *ch = "hello world!"; //"hello world!"在文字常量区
*(ch + 1) = 'a';
printf("%s",ch);
system("PAUSE");
return 0;
}
//还有大虾们怎样用编译器如VS2010查看某一数据在哪个区(例如文字常量区)
//望大虾们不吝赐教
[解决办法]
.c
MSVC2010 编译通过,运行通过
gcc 编译通过,运行出错
.cpp
MSVC2010 编译通过,运行出错
gcc 编译通过(警告),运行出错
[解决办法]
编译通过只等于翻译成了二进制码,运行的时候装入内存,发现这个内存不能修改,所以出错。
编译通过也不是debug通过,debug是调式,单步到那里必须报错,我不信你能在VS2010debug通过。如果那样,引用10楼的话,“如果能修改的话,我会觉得很没自信了”,机制也太不安全了吧。
char *ch= NULL;strcpy(ch, "abcde");
[解决办法]
我给你回答的还不满意?那个什么栈 堆 常量区的都是在内存中,你先不要管它在哪,你知道它的地址后你不就知道它在那了?反正都是在内存中,你调试的时候看下ch的值,也就是字符串常量的地址,在把那个地址复制到内存查看窗口中,你不就能看到常量区在哪了????