2012-03-28 95 views
0

我需要对很多文件(C++)进行一些修改。我需要用sprintf()来替换所有的strcpy()和strcat()。我想通了,转换将这样进行:如何修改文件夹中所有文件的代码

strcpy(out,in) would be sprintf(out,%d,in) 

strcat(out,in) would be sprintf(out,out%d,in) 

我可以使用什么工具来快速地使所有更换,我不能做手工有超过9000这些来修改。

感谢您的建议。

我使用Windows XP/Linux操作系统Ubuntu

我为什么这样做的原因是,我们计划实现一个转换代码的方法。而且,因为我们正在使用strcat和所有的东西,所以我们无法使情景翻译工作良好。因为所有文件都将以正确顺序排列所有文件

+0

在某种IDE中查找并替换为reg-ex? – relaxxx 2012-03-28 19:23:31

+3

请考虑发布在[superuser.com](http://superuser.com)中。我也会推荐[sed](http://en.wikipedia.org/wiki/Sed),它是为这种类型的工作制作的。 – 2012-03-28 19:23:57

+1

[awk](http://en.wikipedia.org/wiki/AWK)和[sed](http://en.wikipedia.org/wiki/Sed)对于这些事情非常方便。 – 2012-03-28 19:24:21

回答

2

我会使用编译器 - 或者更准确地说是预处理器。

具体而言,我会找到一个项目范围内的头部,并在其中添加几行,如:

#define strcpy(out, in) sprintf(out, "%s", in) 
#define strcat(out, in) sprintf(out+strlen(out), "%s", in) 

...并独自离开的源代码的其余部分。然后当你感觉到时,很容易变回明智的状态,并且在他们应该使用的地方使用strcpy/strcat

+0

非常感谢你的回复 – Franko 2012-03-28 19:42:42

+0

@Franko只是要清楚,他告诉你不要这样做。 – 2012-03-28 22:34:10

1

您应该使用任何良好的源代码编辑器(如记事本++)来根据正则表达式替换字符串。但是,在尝试用一个表达式更改9k行之前,请不要忘记将所有文件备份到单独的位置。

问候

+1

“但是,在尝试使用一个表达式更改9k行之前,请不要忘记在一个单独的位置备份所有文件。”而是使用版本控制。 – 2012-03-28 19:26:08

0

首先,在替代将是:

strcpy(out,in) to sprintf(out, "%s", in) 

strcat(out,in) to do{ int temp = strlen(out); sprintf(out+temp, "%s", in); } while(0) 

其次,使这一变化这取决于你的操作系统。如果您处于Linux或macOS或可访问Linuxy工具的Windows中,则可以使用采用正则表达式的sed

在一个正常的窗口中,我不知道。

+0

你不应该使用'sprintf'。总是喜欢'snprintf'。 – 2012-03-28 19:26:51

+0

通常是的,但是如果你使用'strcpy'和'strcat'声音(正确)的代码,即使它没有边界检查,下面的转换也是健全的。事实上,如果你自动执行这个转换,你不能仅仅因为你不知道'in'和'out'的大小而(至少不容易)使用'sprintf'。 – Shahbaz 2012-03-28 20:08:06

相关问题