请教C++中char* 和char数组间转换的问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 17:26:59
我写的这个小程序的作用是把strstr()函数的返回值放到一个char数组p[50]里,可是编译的时候会提示错误“error C2440: '=' : cannot convert from 'char *' to 'char [50]'”,我发现当我把char p[50]改成char* p 就运行正常了,可是我需要把返回值放到一个数组里,请问我该如何修改呢??

void main()
{
char p[50];
memset(p,0,50);
p=strstr("abcopendef","open");
cout<<p;
}
不好意思,说错了,我是想把返回的指针所指向的字符串放到数组里,不是指针,呵呵·

strstr返回的是一个地址值,而数组名表示的也是一个地址值(该数组的首地址)它是一个常量。你怎么能把一个地址放到一个常量里呢? 而且你为什么要把返回值(地址值)放到数组中呢?还是你想把返回值所指向的内存后面的复制到数组中?如果是这样的话,可以这样处理:

int main()
{
char p[50], *q;
q = strstr("abcopendef","open");
if(q != NULL)
strcpy(p, q);
else
strcpy(p, "not found!");

cout << p;
return 0;
}

//可以这样改
#include <iostream>
#include <string>
using namespace std;

int main()
{
char p[50];
memset(p,0,50);
string a=strstr("abcopendef","open");
for(int i=0;i<a.length()&&a.length()<=50;i++){
p[i]=a[i];
}
cout <<p<<endl;
return 0;
}

数组不能作为左值,可以这样改

#include<string.h>
#include<iostream.h>
void main()
{
char p[50],*p2;
memset(p,0,50);
p2=strstr("abcopendef","open");