//字符指针和字符串的一些容易混淆的地方,在这里自己总结了一点经验,如果有什么不正确的地方希望大家可以指出来。我是个初学者,还望多多指导
#include<iostream.h>
#include<string.h>
int main()
{
char *str = "my china"; //该语句虽然编译连接时没有错误,但是在运行的时候就会出现错误,报告内存不可写。
//原因就是str指针变量指向的是一个字符常量,如果str指向的内存再次被赋值就出出错。
//正确的写法应该是 const char* str = "my china";这样在编译时就会提醒错误。
strcpy(str,"no");
cout<<str<<endl;
return 0;
}
#include<iostream.h>
#include<string.h>
int main()
{
char* str = new char[10]; //动态分配内存
strcpy(str,"my china");
str = "dhh"; //此时str指针变量不在指向分配的空间,而是指向字符常量"d"的内存单元,
//这样就不能再改变内存的值了
cout<<str<<endl;
cout<<&str<<endl; //输出指针向量str的地址
cout<<"0X"<<hex<<(int)str<<endl; //指针str指向的内存首地址,hex是以16进制输出
cout<<"0X"<<hex<<(int)&(str[1])<<endl; //指针str指向的首地址下面的一个字节内存
return 0;
}
#include<iostream.h>
#include<string.h>
int main()
{
char *str = "my china"; //该语句虽然编译连接时没有错误,但是在运行的时候就会出现错误,报告内存不可写。
//原因就是str指针变量指向的是一个字符常量,如果str指向的内存再次被赋值就出出错。
//正确的写法应该是 const char* str = "my china";这样在编译时就会提醒错误。
strcpy(str,"no");
cout<<str<<endl;
return 0;
}
#include<iostream.h>
#include<string.h>
int main()
{
char* str = new char[10]; //动态分配内存
strcpy(str,"my china");
str = "dhh"; //此时str指针变量不在指向分配的空间,而是指向字符常量"d"的内存单元,
//这样就不能再改变内存的值了
cout<<str<<endl;
cout<<&str<<endl; //输出指针向量str的地址
cout<<"0X"<<hex<<(int)str<<endl; //指针str指向的内存首地址,hex是以16进制输出
cout<<"0X"<<hex<<(int)&(str[1])<<endl; //指针str指向的首地址下面的一个字节内存
return 0;
}