C语言在linux环境下运行出现munmap_chunk:invalid poiter
本帖最后由 13256068488 于 2019-4-22 20:11 编辑程序要求:输入字符串的里面若含有“kusa”,则删除最初出现的“kusa”,然后输出原字符串与删除后的字符串。如果没有“kusa”就直接输出输入的内容。
在linux程序下执行。可以正确输出结果 不过会有munmap_chunk:invalid poiter错误,然后程序中止。自己是初学,所以指针哪里用发错了。有知道的可以帮忙指正一下吗
ps:因为是学校布置的作业。所以main函数不可以修改。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* remove_kusa(char lyric[]) {
char *p ;
char temp_kusa[] = "kusa";
char* result;
int position;
char *fore,*aft;
result = strstr(lyric,temp_kusa);
if (result == NULL)
p = lyric;
else
{
position = result - lyric;
lyric = '\0';
fore = &lyric;
aft = &lyric;
p = strcat(fore,aft);
}
return p;
}
int main(int argc, char *argv[]) {
char *lyric = argv;
char *removed;
printf("%s\n", lyric);
removed = remove_kusa(lyric);
printf("%s\n", removed);
free(removed);
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *remove_kusa(char lyric[])
{
char *result;
char *str = malloc(strlen(lyric) + 1);
strcpy(str, lyric);
if ((result = strstr(str, "kusa")) != NULL)
{
str = '\0';
strcat(str, result + 4);
}
return str;
}
int main(int argc, char *argv[])
{
char *lyric = argv;
char *removed;
printf("%s\n", lyric);
removed = remove_kusa(lyric);
printf("%s\n", removed);
free(removed);
return 0;
}
人造人 发表于 2019-4-22 21:45
谢谢大佬!仔细看了一下学到了很多.
页:
[1]