如何将strcpy和strcat修改为sprintf

时间:2012-03-29 15:18:28

标签: c++ strcpy strcat

我是C ++的新手,我不得不对一个大项目进行一次修改。我必须采用所有strcpy和strcat方法并将它们转换为sprintf。我发现基本上,转换将是:

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

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

第一个问题,该代码是否有效?

第二个问题,out和in变量绝对没有办法数字化,我需要使用%d而不是%s,对吗?

第三个问题,在我想要修改的所有代码中,out和in变量在方法的每次迭代中都会有所不同,因此修改必须对变量名称具有灵活性。我能以任何方式做到吗?这是一个VisualStudio 98项目......但我在Linux上使用ubuntu和Windows XP。

感谢您的时间和建议!

哦,不要担心我备份了我的文件:D

2 个答案:

答案 0 :(得分:0)

不清楚你为什么要这样做......

但是,尽管如此,从第一个看起来可行;第二个不需要do {} while(0)围绕它 - 你可以只使用{}来保持tmp local。但看起来它会起作用。或者你可以使用

sprintf( out, "%s%s", in ); 

并省去了麻烦。

但我对这些方法的主要关注是你没有检查缓冲区溢出。如果输出不足以保持结果怎么办?当然,这可能发生在原始代码中,因此可能正在检查。

答案 1 :(得分:0)

  

第一个问题,该代码是否有效?

是的,但更简单:

strcat(out, in) -> sprintf(out + strlen(out), in)
  

第二个问题,out和in变量绝对没有办法数字化,我需要使用%d而不是%s,对吗?

否 - strcpystrcat仅适用于字符串内容。

  

out和in变量在我想要修改的所有代码中的方法的每次迭代中都是不同的,因此修改必须对变量名称是灵活的。我能以任何方式做到吗?这是一个VisualStudio 98项目......但我在Linux上使用ubuntu和Windows XP。

这很棘手......可以使用regexp替换,但它可能会因为真正奇怪的代码而失败。您也可以尝试使用预处理器和散列定义,但是您要禁用包含扩展,预处理器通常默默创建的所有额外符号...命令行切换到预处理器可能支持也可能不支持

您需要更改多少个实例?如果不是太多,可以尝试regexp并手动审查......