关于字符数组,字符指针和字符串之间的赋值问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 21:10:07
在Vc++6.0中为什么不能用字符数组给字符指针赋值,也不能用字符串给字符指针和字符数组赋值。如果能应该怎么赋值。我用字符串的头文件是
#include<iostream>
#include<string>
using namespace std;
另外我想用scanf给一个字符指针赋值,应该怎么做?

是可以的,给你代码和注释:

(1)当然这不是赋值
char str[]={"hello world!"}; // 字符数组
char* pStr = &str; // 字符串指针指向字符数组的内存地址

(2)如果要把字符数组的值赋给字符串指针,可以这样做:
char* pStr = new char[sizeof(str) + 1]; // 动态分配内存
strcpy(pStr, &str); // 把字符数组内容拷贝到指针所指内存中
// 。。。使用pStr
delete pStr; // 释放内存

(3)你也可从命令窗口用scanf给字符串指针所指的内存赋值,这样做:
cout << "please input a string" << endl;
char* pBuff = new char[100]; // 字符串缓存,长度可以稍微大一点,因为我们并不知道你要输入多长一个字符串进来
scanf("%s", pBuff); // 从命令窗口获取一个字符串,并存入缓存中
// 如果你想要把缓存中的字符串提取出来,可以这么做:
char* pExactString = new[strlen(pBuff) + 1]; // 动态分配有效字符串长度
// 注意:strlen(pBuff)返回的是有效字符串长度,而非100,而有效长度加1是为了放字符串结束符'\0'的
strcpy(pExactString, pBuff); // 提取出有效字符串(会自动放上结束符)
// 使用pExactString
delete pExactString; // 释放内存
delete pBuff; // 释放字符串缓存

1. 字符串拷贝函数strcpy
格式: strcpy (字符数组名1,字符数组名2)
功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\