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

Can't rename the string that contains a command line argument

我是 C 的新手(使用 C 已经 2 天了),我花了 30 个小时在教程点和一些随机的 youtube 视频上,但对于我的生活我无法弄清楚如何为我在命令行中提供的字符串命名。

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

./filename.c F22 G2

我知道 argv 中的第二个参数,即 argv[1] 包含字符串 F22argv[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]