2 u014776141 u014776141 于 2014.11.19 23:10 提问

C++ 指针与字符串的区别

#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;

}

11个回答

jiangzuzai
jiangzuzai   2014.11.20 20:38
已采纳

char *str;这代表声明一个字符串指针,默认值为空, 即nulll。
需要先为它开辟内存空间才行;
修改如下:
char *str=new char[10];
str="hi,guys!".
而char str[]="hi,guys!";这是声明字符串的方法。

lx624909677
lx624909677   Ds   Rxr 2014.11.20 10:09

第一个是没有空间的,只是指针指向了一个字符串空间,第二个会根据字符串长度自动来开辟空间

snsn1984
snsn1984   Rxr 2014.11.20 09:47

char *是一个指向字符的指针,而这里"hi,guys!"是一个字符串,所以会有问题。
而char str[]是一个字符数组,所以使用它来存储"hi,guys!"没有问题。

snsn1984
snsn1984 貌似我没说清楚。是char*用来存储字符串常量的话,也只是获取了字符串的首个字符的地址,并且后续修改等都会有问题。
接近 3 年之前 回复
91program
91program   Ds   Rxr 2014.11.20 10:02

由于 *str 指向的是常量型字符串 "hi,guys!"; ,所以常量的内容不允许修改。
用 str[] 是因为编译器给它分配了空间,它的空间上的内容是可修改的。

xz1458102234
xz1458102234   2014.11.20 10:28

“hi, guys!”存储在内存中的 字符串常量区,不可以修改;str 是一个指针变量,存储在堆中。
可是一旦改成:
char str1[] ="hi,guys!";
char* str=str1;
strcpy(str,"aaaaa");
就可以运行,因为字符数组是在栈中开辟的一块连续内存,可以修改。

xz1458102234
xz1458102234   2014.11.20 10:28

“hi, guys!”存储在内存中的 字符串常量区,不可以修改;str 是一个指针变量,存储在堆中。
可是一旦改成:
char str1[] ="hi,guys!";
char* str=str1;
strcpy(str,"aaaaa");
就可以运行,因为字符数组是在栈中开辟的一块连续内存,可以修改。

xz1458102234
xz1458102234   2014.11.20 10:28

“hi, guys!”存储在内存中的 字符串常量区,不可以修改;str 是一个指针变量,存储在堆中。
可是一旦改成:
char str1[] ="hi,guys!";
char* str=str1;
strcpy(str,"aaaaa");
就可以运行,因为字符数组是在栈中开辟的一块连续内存,可以修改。

xz1458102234
xz1458102234   2014.11.20 10:29

“hi, guys!”存储在内存中的 字符串常量区,不可以修改;str 是一个指针变量,存储在堆中。
可是一旦改成:
char str1[] ="hi,guys!";
char* str=str1;
strcpy(str,"aaaaa");
就可以运行,因为字符数组是在栈中开辟的一块连续内存,可以修改。

xz1458102234
xz1458102234   2014.11.20 10:29

“hi, guys!”存储在内存中的 字符串常量区,不可以修改;str 是一个指针变量,存储在堆中。
可是一旦改成:
char str1[] ="hi,guys!";
char* str=str1;
strcpy(str,"aaaaa");
就可以运行,因为字符数组是在栈中开辟的一块连续内存,可以修改。

cobps
cobps   2014.11.20 13:48

char *str = "hi,guys!"; 表示你定义了一个指针指向一个字符串,而这个str是没有空间的,是不允许修改的。
char str[] = "hi,guys!"; 表示你定义了一个长度是strlen("hi,guys!")+1的字符数组,并且初始化为"hi,guys!",这个字符串是可以修改的。但是长度不能超过定义的长度。

简单理解:指针是没有存储空间的,他只能指向一个地址而已。
比喻:指针是支付宝中的当面付,有网络时,是可以的。

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片