#include "stdafx.h"
#include
#include
using namespace std;
int main()
{
char *str = "hi,guys!";//若将*str替换为str[]便成功,为什么呢?
strcpy_s(str,6,"aaaaa");
cout << str << endl;
system("PAUSE");
return 0;
}
char *str;这代表声明一个字符串指针,默认值为空, 即nulll。
需要先为它开辟内存空间才行;
修改如下:
char *str=new char[10];
str="hi,guys!".
而char str[]="hi,guys!";这是声明字符串的方法。
char *是一个指向字符的指针,而这里"hi,guys!"是一个字符串,所以会有问题。
而char str[]是一个字符数组,所以使用它来存储"hi,guys!"没有问题。
由于 *str 指向的是常量型字符串 "hi,guys!"; ,所以常量的内容不允许修改。
用 str[] 是因为编译器给它分配了空间,它的空间上的内容是可修改的。
第一个是没有空间的,只是指针指向了一个字符串空间,第二个会根据字符串长度自动来开辟空间
“hi, guys!”存储在内存中的 字符串常量区,不可以修改;str 是一个指针变量,存储在堆中。
可是一旦改成:
char str1[] ="hi,guys!";
char* str=str1;
strcpy(str,"aaaaa");
就可以运行,因为字符数组是在栈中开辟的一块连续内存,可以修改。
char *str = "hi,guys!"; 表示你定义了一个指针指向一个字符串,而这个str是没有空间的,是不允许修改的。
char str[] = "hi,guys!"; 表示你定义了一个长度是strlen("hi,guys!")+1的字符数组,并且初始化为"hi,guys!",这个字符串是可以修改的。但是长度不能超过定义的长度。
简单理解:指针是没有存储空间的,他只能指向一个地址而已。
比喻:指针是支付宝中的当面付,有网络时,是可以的。
由于 *str 指向的是常量型字符串 "hi,guys!"; ,所以常量的内容不允许修改。
用 str[] 是因为编译器给它分配了空间,它的空间上的内容是可修改的。