在C中使用strcat时,程序返回-1073741819

在C中使用strcat时,程序返回-1073741819,c,string,pointers,C,String,Pointers,这就是全部功能。基本上我想做的是从一个句子中删除一些单词。当程序到达第一条strcat生产线时,我有过这样的经历 我真的不知道,这里有什么问题?我误用了指针吗 编辑:我尝试以下方法: void reset_array(char* word,int n) { for (int i = 0; i < n; i++) word[i] = 0; } void change_sentence(char* new_sentence, char* sentence, in

这就是全部功能。基本上我想做的是从一个句子中删除一些单词。当程序到达第一条strcat生产线时,我有过这样的经历

我真的不知道,这里有什么问题?我误用了指针吗

编辑:我尝试以下方法:

   void reset_array(char* word,int n)
{
    for (int i = 0; i < n; i++)
        word[i] = 0;
}

void change_sentence(char* new_sentence, char* sentence, int n)
{
    while (new_sentence!=EMPTY)
    {
        *sentence = *new_sentence;
        sentence++; new_sentence++;
    }
}

void delete_words(char * words[], int n, char * sentence) 
{
    char* sen_copy = sentence; bool first = true;
    char* new_sentence = (char*)malloc(sizeof(char)*strlen(sentence)+1);
    reset_array(new_sentence, strlen(sentence) + 1);
    char* new_sentence_copy = new_sentence;
    while (*sen_copy)
    {
        char current_word[MAX_LEN];
        reset_array(current_word,MAX_LEN);
        int i = 0;
        while (*sen_copy && *sen_copy != WORD_SEPERATOR)
        {
            current_word[i] = *sen_copy;
            i++;
            sen_copy++;
        }
        if (!is_string_in_array(words, n, current_word))
        {
            if (!first)
            {
                *new_sentence_copy = WORD_SEPERATOR;
                new_sentence_copy++;
            }
            int count = 0;
            while (count < i)
            {
                *new_sentence_copy = current_word[count];
                count++;
                new_sentence_copy++;
            }
            first = false;
        }
        if (*sen_copy == WORD_SEPERATOR)
            sen_copy++;
    }
    printf("Hi");
    change_sentence(new_sentence, sentence, strlen(sentence) + 1);
    free(new_sentence);
}
无效重置数组(字符*字,整数n) { 对于(int i=0;i 我得到了相同的错误代码


现在是什么导致了错误?不允许我改判吗?我想如果它是一个数组,你就可以做

来自C标准,§6.7.9:初始化:

声明
char*p=“abc”定义类型为“指向字符的指针”的p,并将其初始化为指向长度为4的类型为“字符数组”的对象,该对象的元素用字符串文字初始化如果试图使用p修改数组的内容,则行为未定义

我的


声明
新的\u空\u字符串后,不能将其分配给
。赋值运算符
=
,或使其成为
strcat
中的目标参数都不起作用。您的选择:


  • new\u empty\u string
    声明为
    char[]
    类型的数组,其中长度足以容纳所需的值

  • 为带有
    malloc
    或相关函数的
    new\u empty\u string
    分配足够的内存,并在使用完内存后释放内存

  • new\u empty\u string
    指向无法修改的字符串文本。一般来说,您应该了解动态内存管理和字符串操作,因为代码中还有其他相关问题。您将
    cptr
    传递给
    strcat
    ,但它不是指向字符串,而是指向
    char a
    ,即使您可以修改它,它有容纳0个字符的空间。句子=空\u字符串在函数之外没有多大作用。首先,将其设置为指向一个局部值,这样一旦离开函数,句子指向的内容就会丢失。其次,为了更改指针指向的对象,需要传递指针的地址。仅供参考-107。。。。是十六进制0XC0000005。这是windows针对访问冲突而发言。在这种情况下,您尝试写入只读存储器i尝试char*new_句子=(char*)malloc(sizeof(char)*strlen(句子)+1);但是有一个问题,因为我需要在main中打印句子本身(我们得到了main并且必须使用它),而且我不能只在函数中写句子=新的句子。我的唯一选项是否仅在函数中工作?堆内存(即分配给
    malloc
    -系列函数的内存)在其作用域的生存期之外仍然存在,只要您有指向它的指针。