0

这是我的代码:

#include <iostream>
#include <fstream>

using namespace std;

int main (int argc, char * argv[])
{
    char * inputFileName = new char ;
    char * outputFileName = new char ;
    *(inputFileName)='\0';
    *(outputFileName)='\0';
    if(argc!=3)
    {
            cout<<"\n\nWRONG SET OF ARGUMENTS!!\n\nSYNTAX:\n"<<endl;
            cout<<"\n./FileCp <SOURCE> <DESTINATION>\n"<<endl;
            return 1;
    }
    strcpy(inputFileName,argv[1]);
    strcpy(outputFileName,argv[2]);

    cout<<"Input File Name = "<<inputFileName<<endl ;
    cout<<"Output File Name = "<<outputFileName<<endl ;
}

这是我使用的命令:

./FileCp /Users/sumanthdamarla/Downloads/20130530_235557.jpg jkhs.jpg

这是输出:

Input File Name = /Users/sumanthdajkhs.jpg
Output File Name = jkhs.jpg

inputFileName 被 outputFileName 覆盖。如何解决这个问题?

4

1 回答 1

4
char * inputFileName = new char ;
char * outputFileName = new char ;

这两行分别为一个字符分配空间。

strcpy(inputFileName,argv[1]);
strcpy(outputFileName,argv[2]);

这两行至少复制了 2 个字符(否则它不会算作参数 - 参数不能为“空”)。

我建议您使用std::string而不是分配内存。然后你就可以做outFilename = argv[2];而不必担心它的大小。

或者,如果您不打算将该名称用于任何其他用途,而是将其保留在比 更有意义的名称中argv[2],那么您可以声明const char *outFilename,并将其设置为outFilename = argv[2];- 但请注意,argv[2]不建议修改 的内容,因为您不知道“背后”是什么。

于 2013-08-17T14:04:06.363 回答