当程序如下时:
void changeString(char* getString)
{
memcpy(getString,"123456",3);
}int main(void)
{
char* myString; myString = (char*)malloc(sizeof(myString));
memset(myString,0,7);
memcpy(myString,"abcdef",6);
changeString(myString);
cout << myString << "\n" << endl;
return 0;
}
这时候的程序运行没问题,打印出: 123def把main()改成如下:
int main(void)
{
char* myString; myString = "abcdef"; changeString(myString);
cout << myString << "\n" << endl;
return 0;
}则运行到changeString()是报内存出错.
为什么这时侯的myString 不能做为参数传过去?
void changeString(char* getString)
{
memcpy(getString,"123456",3);
}int main(void)
{
char* myString; myString = (char*)malloc(sizeof(myString));
memset(myString,0,7);
memcpy(myString,"abcdef",6);
changeString(myString);
cout << myString << "\n" << endl;
return 0;
}
这时候的程序运行没问题,打印出: 123def把main()改成如下:
int main(void)
{
char* myString; myString = "abcdef"; changeString(myString);
cout << myString << "\n" << endl;
return 0;
}则运行到changeString()是报内存出错.
为什么这时侯的myString 不能做为参数传过去?
// 声明了一个指针并且指向一个常量字符串,这样的字符串指针只能读,不能写myString 的定义被隐式转换成了 const char * myString;一般来说你应该这样用:
int main(void)
{
char myString[100] = {0}; strcpy(myString,"abcdef"); changeString(myString);
cout << myString << "\n" << endl;
return 0;
}
2:下面的程序是因为你没有分配内存:
myString = "abcdef";
它是只读的,用new。
myString=new char[100];
strcpy(myString,"abcdef");...
delete myString;
补充:memcpy(getString,"123456",3)可用strncpy(getString,"123456",3)替代