char* a[4] ;//= new char[];
char *str = new char;
/*input data*/
cout<<"please input ten String:\n";
for(i=0;i<N;i++)
{
   cin>>str;
   a[i] = new char[strlen(str)+1];
   a[i]= str;
}  
cout<<"output your input String:\n";
for(i=0;i<N;i++)
{
   cout<<a[i];
   cout<<"  ";
}
cout<<endl;运行结果如下:
please input ten String:
aa
vv
ss
dd
output your input String
dd  dd  dd  dd怎么全是 bb了,为什么啊

解决方案 »

  1.   

    你的读入流一直都是写到str,str是内存中的某个地址。你每次写入的内容都放到这里,显然会造成覆盖。由于a[i]都是指向str,所以每个a[i]最终的值都是一样的。
      

  2.   

    同意
    把 char* a[4];改为char a[4];
    然后,在循环中
    a[i] = &str;
    把字符保存进来就行了。
    对指针操作要小心的:)
      

  3.   

    memcpy(a[i],str,strlen(str)+1);
    替代
    a[i]= str;
      

  4.   

    我是想用char* 实现输入10个字符串,然后比较,冒泡排序,关键是现在如何实现输入到char* []中去,该如何啊
      

  5.   

    好像不行呀,便译通过,但运行出错,况且老师说要用char* []来实现的吧
      

  6.   

    char* a[4];
        char* str= new char;
        /*input data*/
        cout<<"please input ten String:\n"; for(i=0;i<N;i++)
        {
            cin>>str;
        //a[i] = new char[strlen(str)+1];
        //a[i]= str;
                 //这里就错了
    memcpy(a[i],str,strlen(str)+1);
        }
      
    cout<<("Before sorted \n");    for(i=0;i<N;i++)
    {
          cout<<a[i];
      cout<<"  ";
    }
    cout<<endl;
      

  7.   

    在循环里面new/*input data*/
    cout<<"please input ten String:\n";
    for(i=0;i<N;i++)
    {
       char *str = new char;
       cin>>str;
       a[i] = new char[strlen(str)+1];
       a[i]= str;
       delete str;
    }/*别忘了释放指针*/
    delete[] a;
      

  8.   

    //a[i] = new char[strlen(str)+1];不要注释这一句啊
    这次总算行了吧
      

  9.   

    int i,j;
    char* a[N];
        
        cout<<"please input ten String:\n";
        for(i=0;i<N;i++)
    {
         char *str = new char;
         cin>>str;
         a[i] = new char[strlen(str)+1];
         a[i]= str;
         delete str;
    }这里不能加delete str;,要注释掉的吧
      

  10.   

    for(i=0;i<N;i++)
    {
         char *str = new char;
         cin>>str;
         a[i] = new char[strlen(str)+1];
         memcpy(a[i],str,strlen(str)+1);     delete[] str;
    }
      

  11.   

    请问这里
    /*别忘了释放指针*/
    delete[] a;执行出错,该如何释放呢
      

  12.   

    char *str = new char[80];
      

  13.   

    不好意思,刚才上不了网了。
    在循环中删除指针是错误的,惭愧
    char* a[4] ;//= new char[];
    /*input data*/
    cout<<"please input ten String:\n";
    for(i=0;i<N;i++)
    {
       char *str = new char;
       cin>>str;
       a[i] = new char[strlen(str)+1];
       a[i]= str;

    cout<<"output your input String:\n";
    for(i=0;i<N;i++)
    {
       cout<<a[i];
       cout<<"  ";
    }
    cout<<endl;for(i=0;i<N;i++)
    {
        delete a[i];
    }
      

  14.   

    for(i=0;i<N;i++)
    {
        delete a[i];
    }
    这里还是不行吗,会报错的
      

  15.   

    cout<<"please input ten String:\n";
    for(i=0;i<N;i++)
    {
    char *str = new char[2];
    cin>>str;
    a[i]= str;

    cout<<"output your input String:\n";
    for(i=0;i<N;i++)
    {
    cout<<a[i];
    cout<<"  ";
    }
    cout<<endl;

    for(i=0;i<N;i++)
    {
    delete a[i];
    }
      

  16.   

    注意为 char *str = new char[2];