gpt4 book ai didi

c - C中的查找替换字符串函数

转载 作者:太空狗 更新时间:2023-10-29 16:12:06 25 4
gpt4 key购买 nike

网上有很多查找/替换功能,但我找不到为什么这不起作用...(我自己的解决方案)这是我尝试过的

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* strrpl(char *str, char* find, char *replace)
{
int i;
char *pt = strstr(str, find), *firstStr;

firstStr = (char* )malloc(100 * sizeof(char));
// copy just until i find what i need to replace
// i tried to specify the length of firstStr just with pt - str
strncpy(firstStr, str, strlen(str) - strlen(pt));

strcat(firstStr, replace);
strcat(firstStr, pt + strlen(find));

for(i = 0; i < strlen(firstStr); i++)
str[i] = firstStr[i];
return str;
}

int main()
{
char *s, *s1, *s2;
s = (char* )malloc(100 * sizeof(char));
s1 = (char* )malloc(100 * sizeof(char));
s2 = (char* )malloc(100 * sizeof(char));
scanf("%s", s1);
scanf("%s", s2);
scanf("%s", s);

printf("%s", strrpl(s, s1, s2));
return 0;
}

编译给我错误“段错误”,但我不知道他试图分配什么内存,但他不能。我覆盖了内存块还是什么?请帮助:)

谢谢

最佳答案

I overrided a memory block or something?

你有:

  1. 当您分配 firstStr 时可能会出现缓冲区溢出。谁说结果会少于 100 个字符?
  2. 当您将答案复制回输入字符串时,另一个潜在的缓冲区溢出。谁说它会合身?
  3. 每次使用 scanf 时都可能发生缓冲区溢出。
  4. 每次调用 malloc 时都会发生内存泄漏。
  5. return str; 之前 strcpy 的低效实现。
  6. 当输入字符串不包含替换字符串时发生崩溃(正式的,未定义的行为)。 strstr 返回 NULL 当没有匹配且您从不检查它时。
  7. strncpy 的潜在问题,如果没有足够的空间容纳 NUL,您的字符串将不会以 NUL 结尾。

关于c - C中的查找替换字符串函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27192710/

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