#include<iostream>
#include<string.h>
using namespace std;
int main(void)
{
char a[] ="hello"; //位于栈中,可以修改,不过因为stack分配好了,后面如果加上其他字符串最后会发生stack corrupted(堆栈损坏,分配不够)
//char a[20]="hello"; //分配好大小,堆栈足够大的话可以避免堆栈崩溃(此情况在vs2012和g++中都有出现)
a[0] = 'X'; //修改
char *p="world"; //注意p指向的是常量字符串,位于静态存储区,不能修改。
//const char* p="world"; //p为指向常量的指针
//p[0]='X'; //编译通过,运行崩溃
//strcpy(a,p);
strcat(a,p); //这里在不同平台有差异:1、在vs2012中,*p为const和非const都能编译通过
// 2、在g++中,*p要为const常量才能编译通过
// 3、相同点都是把字符串p接在a[]后会出现运行崩溃,就是前面说的栈分配不够
//char b[]="world"; //b只是拿来控制变量对比的哈哈
//strcat(a,b);
//strcpy(p,a);
cout<< a<<endl;
//cout<<p<<endl;
return 0;
}
#include<string.h>
using namespace std;
int main(void)
{
char a[] ="hello"; //位于栈中,可以修改,不过因为stack分配好了,后面如果加上其他字符串最后会发生stack corrupted(堆栈损坏,分配不够)
//char a[20]="hello"; //分配好大小,堆栈足够大的话可以避免堆栈崩溃(此情况在vs2012和g++中都有出现)
a[0] = 'X'; //修改
char *p="world"; //注意p指向的是常量字符串,位于静态存储区,不能修改。
//const char* p="world"; //p为指向常量的指针
//p[0]='X'; //编译通过,运行崩溃
//strcpy(a,p);
strcat(a,p); //这里在不同平台有差异:1、在vs2012中,*p为const和非const都能编译通过
// 2、在g++中,*p要为const常量才能编译通过
// 3、相同点都是把字符串p接在a[]后会出现运行崩溃,就是前面说的栈分配不够
//char b[]="world"; //b只是拿来控制变量对比的哈哈
//strcat(a,b);
//strcpy(p,a);
cout<< a<<endl;
//cout<<p<<endl;
return 0;
}