在C中使用strcat时,程序返回-1073741819
这就是全部功能。基本上我想做的是从一个句子中删除一些单词。当程序到达第一条strcat生产线时,我有过这样的经历 我真的不知道,这里有什么问题?我误用了指针吗 编辑:我尝试以下方法:在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
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
-系列函数的内存)在其作用域的生存期之外仍然存在,只要您有指向它的指针。