char *p,arrChar[100]="texting";
p="texting";
*p='0';
p=arrChar+1;
printf("%d\t%d\n",sizeof(arrChar),strlen(arrChar));
printf("%d\t%d\n",sizeof(char *),strlen(p));这个有什么错误吗?
为什么我用的编译器编译的时候,*p=‘0’有这句编译时没错,可是运行就会中止呢?
p="texting";
*p='0';
p=arrChar+1;
printf("%d\t%d\n",sizeof(arrChar),strlen(arrChar));
printf("%d\t%d\n",sizeof(char *),strlen(p));这个有什么错误吗?
为什么我用的编译器编译的时候,*p=‘0’有这句编译时没错,可是运行就会中止呢?
你指的是字面值,字面值是不能修改的。你后面*p='0';当然会出错了。
至于编译没出错,而运行出错了。这是因为C++是静态编译的(好像又叫前绑定),
编译的时候不会检查*p='0';,运行到*p='0';时当然出错了。<这里说得不太专业,我也是菜鸟,不过原理就是这样的>
望高手指点!
你下面这两行:char *p;
P="texting";这时,指针p 指向的是常量 "texting"; 这时,你不能修改 p 指向的内容,因为常量是不允许修改的。
所以,运行时就会出错了。
*p = '0'; P指针指向常量了,怎么修改?
char* buf = new char[strlen(arrChar)+1];
p = buf;
*p='0';
p=arrChar+1;
printf("%d\t%d\n",sizeof(arrChar),strlen(arrChar));
printf("%d\t%d\n",sizeof(char *),strlen(p));
delete[] buf;
buf = NULL;