这是我的代码:
#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
outputFileName正在覆盖inputFileName。 如何解决这个问题?
答案 0 :(得分: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
,并将其设置为{ {1}} - 但要注意不建议修改outFilename = argv[2];
的内容,因为您不知道“背后”是什么。