将字符串添加到C中的给定命令行参数

时间:2016-11-05 17:06:05

标签: c string concatenation command-line-arguments

您好我刚刚开始使用C编程,我正在尝试读取文件并将文件名作为参数而不是结尾.txt。我想在我的代码中添加.txt:./ myexample.exe文件

如果我使用file.txt没有问题,但我不知道如何更改argv [1] 我试过char * n = argv [1] +“。txt”;它不起作用,我什么都不知道..

int main(int argc, char* argv[]) {
      char *n = argv[1] +".txt";
      FILE *fp1;
      fp1 = fopen(n , "r");

如果我使用char *n = argv[1]+".txt"

,我会得到什么
  

错误:无效操作数到二进制+(有'char *'和'char *')

3 个答案:

答案 0 :(得分:3)

在您的代码中,

 char *n = argv[1] +".txt";

不符合您的想法。在C中,+不能用于连接字符串

仅供参考,来自C11,章节§6.5.6

  

另外,两个操作数都应具有算术类型,或者一个操作数应为a   指向完整对象类型的指针,另一个指针应具有整数类型。(递增为   相当于添加1。)

两个操作数都不能是指向对象的类型。

如果您打算连接字符串,请使用strcat(),但请确保

  • 目的地是可修改的(尝试修改字符串文字是UB)
  • 目的地有足够的空间来容纳最终结果(更短的目的地导致访问超出绑定的内存,再次调用UB)。

答案 1 :(得分:1)

安全地做这件事很烦人:你需要小心做一个足够大的char数组来保存整个字符串。一种方式:

size_t arglen=strlen(argv[1]);
char* filename=malloc(arglen+5); //Enough to hold the whole string
strcpy(filename,argv[1]);
strcat(filename,".txt");

请务必稍后free指针。

答案 2 :(得分:0)

你不能用+连接字符串。使用strcpy和strcat:

char n[256];
strcpy(n, argv[1]);
strcat(n, ".txt");

确保n足够大以容纳文件名+扩展名。