在C中向给定的命令行参数添加字符串

在C中向给定的命令行参数添加字符串,c,string,concatenation,command-line-arguments,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

您好,我刚开始用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*”的操作数无效)

在代码中

 char *n = argv[1] +".txt";
不会做你认为它会做的事。在C语言中,
+
不能用于连接字符串

仅供参考,摘自《法典》第11章第6.5.6节

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

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

如果要连接字符串,请使用,但要确保

  • 目标可修改(尝试修改字符串文字为UB)
  • 目的地获得了足够的空间来包含最终结果(更短的目的地引导再次调用UB访问绑定外内存)

不能将字符串与+连接起来。使用strcpy和strcat:

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

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

安全地执行此操作有点烦人:您需要小心地创建一个足够大的
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");

以后一定要释放指针。

指针可能重复1)指针不是字符串!2) 指针不是数组。3) C没有独特的字符串类型。100不够大,无法容纳任何文件名。例如,Linux上至少需要256个文件名才能保存任何文件名。感谢hintIt,在复制之前检查字符串是否适合缓冲区可能是明智的。