c - 段错误错误?

标签 c arrays string segmentation-fault void

有谁知道为什么我总是收到此段错误错误? 我正在尝试运行一个程序,该程序在“src”中定位子字符串“from”,并将 src 中所有不重叠的“from”替换为输出字符串“dest”中的“to”。 另外,有人可以为我提供测试此案例的正确方法吗?因为我不太确定如何用“void”类型显示它......(尝试将此作为练习)

void find_replace(char* src, char* from, char* to, char* dest)
{
  int count = 0;
  int diff = strlen(to) - strlen(from);
  int destlength = strlen(src);
   dest = malloc(destlength);
  for (int i = 0; i < strlen(src); i++)
    {
      int index = 0;
      while (src[i+index] == from[index] && index < strlen(from)){
        index++;
      }
      if (index == strlen(from)) {
        for (int j = 0; j < strlen(to); j++) {
          dest[i+j+(count * diff)] = to[j];
        }
        i += strlen(from) - 1;
        count++;
      }
      else {
        dest[i + (count * diff)] = src[i];
      }
    }
  return ; 
}

对于测试来说这样做是否足够?

int main (int argc, char *argv[])
{
     char* dest;
   find_replace("hello my name is leeho lim", "leeho lim", "(insert name)" dest);
  for (int i = 0; i < strlen(dest); i++)
    {
      printf("%c", dest[i]);
    }
  printf("\n");
}

最佳答案

出现问题是因为您尝试使用

访问未分配的指针
strlen(dest)

在主程序的 for 中。

这样做的原因是你将指针dest的值发送给函数,而不是指针本身,所以当你在函数内部分配内存时,你实际上并没有修改内存地址存储在它之外的指针中。

当您将指针作为函数的参数发送时,您实际上所做的是发送该指针中存储的内存地址,您发送的是指针中存储的值,而不是指针本身。

如果您想获取为字符串分配的内存地址,您可以让函数返回它,也可以将 dest 声明并发送为 pointer to a pointer .

编辑:正如其他评论指出的那样,您还可以在 main() 中执行分配,而不是在函数内执行分配。

关于c - 段错误错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157824/

相关文章:

php - 尽管存在 isset(),但出现未定义的偏移错误

string - 特殊交织字符串编码

将 c 顺序转换为 OpenMP 问题

arrays - 在 Bash 中循环遍历多个数组时关联数组键中的空格

c - 如何在 C 中使用逆函数

javascript - 复制数组任意次数(javascript)

java - 使用 ANTLR4 处理字符串

string - 构造倒排索引列表的复杂性

c - 海湾合作委员会错误 : cannot specify -c and -o with multiple files

c++ - 使用 Python.h 从 C++ 调用 Django