将字符串与数组中的单词进行比较

问题描述 投票:0回答:1

我从老师那里得到了一份作业,编写了一个代码,该代码将给定的单词与位于字符串数组中的一堆单词进行比较。如果数组中的单词比字典中的单词小,我需要将其放入新数组中。否则,我要下一个词。例如;给定的单词:你好arr =公共汽车,alpha,世界,java。新数组=总线,alpha。我写了一个使用STRCMP做到这一点的代码,但是当计算机到达strcpy部分时,计算机将我扔了出去。这是我的代码

char** LowerSTR(char* arr[], int size_arr, char* str, int* size_res)

size_res = 0;
char** newArr= (char**)calloc(size_arr, sizeof(char));
for (int i = 0; i < size_arr; i++)
{
    if (strcmp(str, arr[i])==1)
    {
        for (int k = 0; k <size_arr;k++)
        {
            strcpy(newArr[k], arr[i]);
        }
        size_res++;
    }
}
if (size_res == 0)
    return NULL;
else return newArr;}

也许我应该改用STRCAT?

请帮助:\

c arrays string strcmp strcpy
1个回答
1
投票

在使用strcpy作为参数调用newArr[k]时,您要取消引用NULL指针。

回想一下,我们如下分配newArr

char** newArr= (char**)calloc(size_arr, sizeof(char));

这里实际上存在多个错误。首先是我们实际上想要calloc s的区域时将sizeof(char)char*结合在一起。如此纠正1我们有

char** newArr= calloc(size_arr, sizeof(char*));

由于我们已经calloc占用了这块内存,所以所有内存都被清零了。因此,当strcpy内部访问newArr[k](自身为char*类型)时,它指向内存地址0,该地址很可能会被OS反转,并且在任何情况下都不是我们程序上下文中的有效地址。 >

为了解决这个问题,我们需要为每个字符串分配。例如,可以这样做

newArr[k] = malloc(strlen(arr[i]) + 1); // The +1 is for the \0 termination character

我们strcpy之前的那一行。

[您还有一个size_res的错误,因为您只想将其视为int而不是int*,因为当您要更改或读取它指向的值时需要取消引用它。

1

有关为何删除演员表的信息,请参见here

0
投票

您应该扫描newArr并打印其中的所有字符串,例如:

© www.soinside.com 2019 - 2024. All rights reserved.