【发布时间】:2015-03-25 07:41:50
【问题描述】:
有谁知道为什么我不断收到此段错误错误? 我正在尝试运行一个程序,该程序在“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");
}
【问题讨论】:
-
字符串文字在 C 中不可修改。
-
是的,我意识到了这一点,但我认为这不是我的 seg 错误的根源
-
怀疑所有警告都没有启用。建议 -Wall
-
您替换的文本比原来的多,因此 DEST 的大小太小。您需要更精确地将大小分配给 Dest。
-
修复了来自 -Wall 的所有可疑警告,但它仍然存在...在最后初始化了 char* dest(怀疑可能会做某事)...我还更改了“to”输入小于“来自”输入,但段错误仍然存在):
标签: c arrays string segmentation-fault void