gpt4 book ai didi

c - 段错误错误?

转载 作者:行者123 更新时间:2023-11-30 15:24:54 26 4
gpt4 key购买 nike

有谁知道为什么我总是收到此段错误错误?我正在尝试运行一个程序,该程序在“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com