gpt4 book ai didi

c - 在文件中搜索和替换会导致访问冲突

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

我正在尝试搜索并替换文件中的字符串,但它会导致访问冲突。我做错了什么?

这是我的代码:

BOOL SearchAndReplace(const char *destFileName, const char *srcString, const char *newString)
{
FILE *ostream = fopen(destFileName, "r+");
if (ostream == 0) return false;
int f=0,n=0;
char st[30];
while(!feof(ostream))
{
fscanf(ostream,"%s",st);
if(strcmp(st,srcString)==0)
{
fprintf(ostream,"%s",newString);
}
}
fclose(ostream);
return true;
}

SearchAndReplace("file.txt", "en", "tr");

最佳答案

这是错误的:

char st[30];
while(!feof(ostream))
{
fscanf(ostream,"%s",st);

您不能要求 fscanf 将字符串读入如此小的缓冲区,除非您知道该字符串始终小于缓冲区。您很可能遇到超过 30 个字符的字符串。

分配更大的缓冲区,或使用一些现代 C++ 构造,例如 ifstream >> string。

此外,上面的代码将删除空格。 fscanf 将不会返回 %s 上的空格。

最后,它只会替换精确匹配,周围有空格。因此,在像“blah'foo'blah”这样的字符串中将“foo”替换为“bar”将不起作用,因为 fscanf 不会在“'”(或任何其他非空白字符)处分隔单词

关于c - 在文件中搜索和替换会导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219103/

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