13256068488 发表于 2019-4-22 20:10:40

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);
}

人造人 发表于 2019-4-22 21:45:07

#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;
}

13256068488 发表于 2019-4-23 09:50:44

人造人 发表于 2019-4-22 21:45


谢谢大佬!仔细看了一下学到了很多.
页: [1]
查看完整版本: C语言在linux环境下运行出现munmap_chunk:invalid poiter