无法重命名包含命令行参数的字符串

问题描述

我是C语言的新手(使用C语言已有2天),并且在过去的30个小时里,我一直在学习教程和一些随机的youtube视频,但是对于我来说,我不知道该怎么做在命令行中输入的字符串上输入一个名称

所以我有一个文件filename.c,然后是三个参数

./filename.c F22 G2

我知道argv中的第二个参数,即argv[1]包含字符串F22,而argv[2]包含G2。我不想将这两个字符串重命名str1str2

当我尝试打印str1时,我得到很多奇怪的字符,而不是F22。我搞砸了什么?请参阅下面的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc,char* argv[])
{
   char* str1[] = {argv[1]};
   char* str2[] = {argv[2]};

   printf("%s\n",str1);
   return 0;
}

感谢您的帮助。

解决方法

定义

char* str1[] = {argv[1]};

str1定义为一个单个char *元素的数组,该单个元素为argv[1]

重要的部分是str1不是字符串,而是字符串的数组

要定义字符串,您需要删除花括号(方括号和花括号):

char* str1 = argv[1];  // Define str1 as an alias for argv[1]

当然,您可以直接使用argv[1]

printf("%s\n",argv[1]);

对于不应该修改的字符串,建议const对其进行限定:

const char* str1 = argv[1];  // Define str1 as an alias for argv[1]