首页 > 解决方案 > 无法重命名包含命令行参数的字符串

问题描述

我对 C 非常陌生(使用 C 已经 2 天了),过去 30 个小时我都在教程点和一些随机的 youtube 视频上,但对于我的生活,我无法弄清楚如何命名在我在命令行中给出的字符串上。

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

./filename.c F22 G2

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

当我这样做并尝试打印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;
}

任何帮助表示赞赏。

标签: ccommand-line-arguments

解决方案


定义

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]

推荐阅读