使用STRCPY在另一个2d数组中复制2d字符数组

佛赞加德兹

我正在尝试使用字符串函数strcpy将2d字符数组复制到另一个2d字符数组中,但这给了我访问冲突的错误。我不知道我做错了什么。我正在发布代码,错误可以告诉我我做错了什么是什么

int searching(char *name[],char * namesearched,int size)
{
    int count =0;
    int start = 0;
    int end = count;
    for(;start<=end;)
    {
        int mid = (start + end)/2;
        if(strcmp(namesearched,name[mid])==0)
        {
        return mid;
        }
        else if(strcmp(namesearched,name[mid])==1)
        {
         end=mid -1; 
        }
        else if(strcmp(namesearched,name[mid])==-1)
        {

            start = mid +1;
        }
    }
    return -1;
}

void sorting(char **name,char ** meaning,int count)
{
    for (int i=0;i<count;i++)
    {
        for(int j=i+1; j<count; j++)
        {
            char tempname[100];
            char tempmeaning[100];
            if(strcmp(name[j-1],name[j])>0)
            {
                strcpy(tempname,name[j]);
                //strcpy(name[j],tempname);
                strcpy(name[j-1],name[j]);
                strcpy(name[j],name[j-1]);
                strcpy(name[j-1],tempname);

                strcpy(tempmeaning,meaning[j]);
                strcpy(meaning[j],meaning[j-1]);
                strcpy(meaning[j-1], tempmeaning);
            }
        }
    }
}

void main()
{
    int size=60;
    int count=0;
    char namesearched[100];
    cout << "Enter the name to be searched: ";
    cin.getline(namesearched , 100);
    char** name= new char * [size];
    char** meaning = new char * [size];
    for(int i=0;i < size ; i++)
    {
        name[i]= new char [100];
        meaning[i]= new char[100];
        count ++;
    }
    name[0] = "Journalist";
    name[1] = "Blister";
    name[2] = "List";
    name[3] = "Listen";
    name[4] = "Novelist";
    name[5] = "Song";
    name[6] = "Eat";
    name[7] = "West";
    name[8] = "Idealist";
    name[9] = "Industry";
    name[10] = "Legalist";
    name[11] = "Write";
    name[12] = "Medal";
    name[13] = "Nation";
    name[14] = "Accident";
    name[15] = "Nest";
    name[16] = "Bird";
    name[17] = "Animal";
    name[18] = "Lion";//wrong
    name[19] = "Pigeon";
    name[20] = "Real";
    name[21] = "Accept";
    name[22] = "Ability";
    name[23] = "Bald";
    name[24] = "Backbite";
    name[25] = "Wakeful";
    name[26] = "Absolute";
    name[27] = "Wail";
    name[28] = "Abiding";
    name[29] = "Unacceptable";
    name[30] = "Tacker";
    name[31] = "Vain";//wrong
    name[32] = "Abolish";
    name[33] = "Taking";
    name[34] = "Unarmed";
    name[35] = "Habit";
    name[36] = "Notus";
    name[37] = "Impecle";
    name[38] = "Accelerate";
    name[39] = "Agony";
    name[40] = "Sulk";
    name[41] = "Nowise";
    name[42] = "Hypocrisy";
    name[43] = "Nape";
    name[44] = "Eccentric";
    name[45] = "Naturally";
    name[46] = "Gratitude";
    name[47] = "Mesmerizing";
    name[48] = "Epic";
    name[49] = "Abstain";
    name[50] = "Enactment";
    name[51] = "Hammock";
    name[52] = "Nodal";
    name[53] = "Laborious";
    name[54] = "Nonverbal";
    name[55] = "Haggle";
    name[56] = "Notorious";
    name[57] = "Lagger";
    name[58] = "Pathetic";
    name[59] = "Norms";


    meaning[0] = "Sahaafi";
    meaning[1] = "Chaala";
    meaning[2] = "Fehrist";
    meaning[3] = "Sunna";
    meaning[4] = "Naval Nigaar";
    meaning[5] = "Ganna";
    meaning[6] = "Khanna";
    meaning[7] = "Maghrib";
    meaning[8] = "Tadawuri";
    meaning[9] = "Sannat";
    meaning[10] = "Zabta Parast";
    meaning[11] = "Likhna";
    meaning[12] = "Tangha";
    meaning[13] = "Qoom";
    meaning[14] = "Hadsa";
    meaning[15] = "Ghonsla";
    meaning[16] = "Parinda";
    meaning[17] = "Janwar";
    meaning[18] = "Shair";
    meaning[19] = "Kabootar";
    meaning[20] = "Haqeekat";
    meaning[21] = "Qabool";
    meaning[22] = "Kabliyat";
    meaning[23] = "Ganja";
    meaning[24] = "Ghebat Karna";
    meaning[25] = "Jagta";
    meaning[26] = "Bikul";
    meaning[27] = "Gham Karna";
    meaning[28] = "Mustakil";
    meaning[29] = "NaGawar";
    meaning[30] = "Jorna Wala";
    meaning[31] = "Gari";
    meaning[32] = "Rad kar dena";
    meaning[33] = "Dil-chasp";
    meaning[34] = "Nehatta";
    meaning[35] = "Addat";
    meaning[36] = "Dakni hawwa";
    meaning[37] = "Rokna";
    meaning[38] = "Taiz karna";
    meaning[39] = "Sakht Takleef";
    meaning[40] = "Roth Jana";
    meaning[41] = "Hargiz Nahi";
    meaning[42] = "Naffaq";
    meaning[43] = "Mankaa";
    meaning[44] = "Sanki";
    meaning[45] = "Fitratan";
    meaning[46] = "Tashakur";
    meaning[47] = "Mashoor Karna";
    meaning[48] = "Razmiya";
    meaning[49] = "Baaz Rakhna";
    meaning[50] = "Nifaaz";
    meaning[51] = "Jholay ki tarhan ka Bichona";
    meaning[52] = "Gutheela";
    meaning[53] = "Mehnat Talab";
    meaning[54] = "Ghair Lafzey";
    meaning[55] = "Takrar Karna";
    meaning[56] = "Badnam";
    meaning[57] = "Ahista Chalnay walla";
    meaning[58] = "Intehai afsoos naak baat";
    meaning[59] = "Mayar";

    int mid;
    sorting( name , meaning , count);
    int mid = searching(name,namesearched,count); 
    if( mid == -1 )
    {
        char ** tempname = new char* [60];
        char ** tempmeaning = new char*[60];
        if(count == size)
        {
            int increase =(10 * size)/100;
            size = increase + size;
            for(int i=0 ; i<size ; i++)
            {
                tempname[i] = new char [100];
                tempmeaning[i]= new char [100];
            }
            for(int i = 0; i<count ; i++)
            {                
                strcpy(tempname[i],name[i]);
                strcpy(tempmeaning[i],meaning[i]);
            }
        }
        strcpy(tempname[count] , namesearched);
        cin >> tempmeaning[count];
        count ++;

        sorting( tempname , tempmeaning , count);

        for (int i =0;i < count ;i++)
        {
            delete [] name[i];
            delete [] meaning[i];
        }
        //delete [] name;
        //delete [] meaning;
        name = tempmeaning;
        meaning = tempmeaning;
        tempmeaning = NULL ;
        tempname = NULL;
    }
    else 
    {
        cout <<"The meaning of " << namesearched << " is: " << meaning[mid] << endl;
    }
    _getch();
}

访问冲突写入位置0x001fbe5c。

的值计数大小为60

在该行上还有更多的strcpy工作,strcpy(tempname , name[j])但是当遇到此行时strcpy(name[j] , name[j-1]),会抛出访问冲突错误

来自莫斯科的弗拉德

此函数声明

void sorting(char *name[],char *meaning[],int size,int count);

不处理二维数组。

例如,如果您有这样的二维数组

char name[60][100];
char meaning[60][100];

然后函数声明看起来像

void sorting( char name[60][100], char meaning[60][100], size_t count );

或者

void sorting( char name[][100], char meaning[][100], size_t count );

或者

void sorting( char ( *name )[100], char ( *meaning )[100], size_t count );

并且第三个参数的参数值应等于60。

例如,对于您的函数声明,此参数char *name[]具有类型不完整的一维指针数组,char *数组的类型已调整为type char **而且,如果相应的参数是指向字符串文字的指针数组,则该函数具有未定义的行为,因为您不能更改字符串文字。

因此,似乎您在错误地处理数组,因为它们的定义与功能代码的逻辑不符。

size该功能中也未使用参数

因此,您的代码最初只是错误的。

考虑到此if语句中的条件

if(strcmp(name[j-1],name[j]))

应该看起来像

if ( strcmp( name[j-1], name[j] ) > 0 )

如果您想按升序对数组进行排序或类似

if ( strcmp( name[j-1], name[j] ) < 0 )

如果要按降序对数组进行排序。

编辑:追加问题后,可以看到1)内存泄漏,因为最初指向分配的内存的指针已使用字符串文字的地址重新分配,并且2)您正在尝试更改不可变的字符串文字。

代替例如

name[0] = "Journalist";

你必须写

strcpy( name[0], "Journalist" );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将2d字符数组复制到另一个2d字符数组

来自分类Dev

根据另一个2D数组重新排序2D数组

来自分类Dev

使用Java中的另一个类从2D数组打印用户输入?

来自分类Dev

算法-在另一个2D数组中查找2D数组的存在

来自分类Dev

从2D数组中选择不在另一个2D数组中的行

来自分类Dev

将2D数组存储在另一个数组中-Java

来自分类Dev

python使用较小的2D数组与另一个较大的数组进行映射

来自分类Dev

python使用较小的2D数组与另一个较大的数组进行映射

来自分类Dev

创建一个由另一个2d数组的累积组成的2d数组

来自分类Dev

将2d数组元素从一个复制到另一个

来自分类Dev

如何将一个2d数组的内容复制到另一个?(VBA)

来自分类Dev

将2d数组复制到另一个数组时出错

来自分类Dev

设置2D数组值会覆盖C中的另一个值

来自分类Dev

从numpy中另一个多维数组中的2D索引数组创建多维数组

来自分类Dev

从另一个2d数组中提取具有索引的2d数组的元素

来自分类Dev

如何查找在另一个2d数组中出现的2d numpy数组的索引

来自分类Dev

将2d数组的元素乘以另一个2d数组的元素的方法

来自分类Dev

从另一个数组更新numpy 2d数组索引

来自分类Dev

有没有办法查看2D数组中的值是否匹配另一个2D数组中的任何值?

来自分类Dev

numpy:在不考虑顺序的情况下,在另一个2D数组中查找2D数组的对应关系

来自分类Dev

我如何从2D数组中选择值并添加到另一个2D数组Python中

来自分类Dev

如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

来自分类Dev

如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

来自分类Dev

如何向量化2D数组和另一个向量之间的运算?

来自分类Dev

将列从一个2D数组添加到另一个2D数组

来自分类Dev

有效地读取2D数组中另一个值附近的值?

来自分类Dev

如何将我从main制作的2d数组传入C中的另一个函数

来自分类Dev

从另一个数组的每第5个元素创建2D数组

来自分类Dev

Python / Numpy-矩阵将2D数组与另一个2D数组的每一行相乘

Related 相关文章

  1. 1

    将2d字符数组复制到另一个2d字符数组

  2. 2

    根据另一个2D数组重新排序2D数组

  3. 3

    使用Java中的另一个类从2D数组打印用户输入?

  4. 4

    算法-在另一个2D数组中查找2D数组的存在

  5. 5

    从2D数组中选择不在另一个2D数组中的行

  6. 6

    将2D数组存储在另一个数组中-Java

  7. 7

    python使用较小的2D数组与另一个较大的数组进行映射

  8. 8

    python使用较小的2D数组与另一个较大的数组进行映射

  9. 9

    创建一个由另一个2d数组的累积组成的2d数组

  10. 10

    将2d数组元素从一个复制到另一个

  11. 11

    如何将一个2d数组的内容复制到另一个?(VBA)

  12. 12

    将2d数组复制到另一个数组时出错

  13. 13

    设置2D数组值会覆盖C中的另一个值

  14. 14

    从numpy中另一个多维数组中的2D索引数组创建多维数组

  15. 15

    从另一个2d数组中提取具有索引的2d数组的元素

  16. 16

    如何查找在另一个2d数组中出现的2d numpy数组的索引

  17. 17

    将2d数组的元素乘以另一个2d数组的元素的方法

  18. 18

    从另一个数组更新numpy 2d数组索引

  19. 19

    有没有办法查看2D数组中的值是否匹配另一个2D数组中的任何值?

  20. 20

    numpy:在不考虑顺序的情况下,在另一个2D数组中查找2D数组的对应关系

  21. 21

    我如何从2D数组中选择值并添加到另一个2D数组Python中

  22. 22

    如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

  23. 23

    如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

  24. 24

    如何向量化2D数组和另一个向量之间的运算?

  25. 25

    将列从一个2D数组添加到另一个2D数组

  26. 26

    有效地读取2D数组中另一个值附近的值?

  27. 27

    如何将我从main制作的2d数组传入C中的另一个函数

  28. 28

    从另一个数组的每第5个元素创建2D数组

  29. 29

    Python / Numpy-矩阵将2D数组与另一个2D数组的每一行相乘

热门标签

归档