这是整个功能。基本上我想做的是从句子中删除一些单词。当程序到达第一条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);
}
我得到相同的错误代码。
现在是什么原因导致错误?我不可以更改句子吗?我以为如果是数组,您就可以做到。
答案 0 :(得分:2)
根据C标准,第6.7.9节:初始化:
声明
char *p = "abc";
定义类型为“ pointer to char”的p并将其初始化为指向长度为4的“ char型数组”类型的对象,其元素用字符串文字初始化。 如果尝试使用p修改数组的内容,则该行为是不确定的。
强调我的。
声明new_empty_string
后,您不能对其进行分配。赋值运算符=
或将其设为strcat
中的目标参数都无效。您的选择:
new_empty_string
声明为类型为char []
的数组,其长度足以容纳您期望的值new_empty_string
或相关功能为malloc
分配足够的内存,并在使用完毕后为free
分配内存。