gpt4 book ai didi

c++ - 解析命令行参数时出现问题

转载 作者:行者123 更新时间:2023-11-27 23:13:36 25 4
gpt4 key购买 nike

这是我的代码:

#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 覆盖。如何解决?

最佳答案

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] 的内容,因为您不知道“背后”是什么。

关于c++ - 解析命令行参数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18289610/

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