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

时间:2019-01-07 20:21:18

标签: 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, 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);
}

我得到相同的错误代码。

现在是什么原因导致错误?我不可以更改句子吗?我以为如果是数组,您就可以做到。

1 个答案:

答案 0 :(得分:2)

根据C标准,第6.7.9节:初始化

  

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

强调我的。

声明new_empty_string后,您不能对其进行分配。赋值运算符=或将其设为strcat中的目标参数都无效。您的选择:

  1. new_empty_string声明为类型为char []的数组,其长度足以容纳您期望的值
  2. 使用new_empty_string或相关功能为malloc分配足够的内存,并在使用完毕后为free分配内存。