当程序如下时:
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 不能做为参数传过去?

解决方案 »

  1.   

    myString = "abcdef"; 
    // 声明了一个指针并且指向一个常量字符串,这样的字符串指针只能读,不能写myString 的定义被隐式转换成了 const char * myString;一般来说你应该这样用: 
    int main(void) 

    char myString[100] = {0}; strcpy(myString,"abcdef"); changeString(myString);
    cout << myString << "\n" << endl;
    return 0; 
    }
      

  2.   

    1:你上面的程序也错了,你内存分配错了,注意sizeof(myString)=sizeof(int),这个是你的指针的大小
    2:下面的程序是因为你没有分配内存:
      

  3.   

    char* myString;
    myString = "abcdef";
    它是只读的,用new。
      

  4.   

    对,你赋值了一个常量,不能改变其内容。你应该这样写:char* myString=NULL;
    myString=new char[100];
    strcpy(myString,"abcdef");...
    delete myString;
      

  5.   

    楼上说的有理!
    补充:memcpy(getString,"123456",3)可用strncpy(getString,"123456",3)替代