从 argv[] 获取特定的字符值并创建一个新的 const char

Getting specific character values from argv[] and making a new const char

我确定之前已经回答过这个问题,但我无法全神贯注于这些答案。我正在学习入门 C 课程,并且提供了一个 header、cs50.h,其中包含字符串类型。所以虽然我一直在使用它,但我不太确定它是如何工作的。

我的目标是将 argv[1][0]argv[1][1] 处的字符转换成const char *变量。虽然我知道答案肯定涉及指针和地址,但我一直无法找到成功的组合。我在这里问,希望有人能用我自己的代码告诉我正确的方法,这样我就可以学习如何去做。

UPDATE 我试图从第二个字符(即不是文件名的第一个字符串)中获取前两个字符,因此,argv[ 1][0]argv[1][1] 所以给定的输入将是这样的 helloworld 我只想要 'h' 和 'e'。我不知道如何将 argv 数组中的 'h' 和 'e' 组合成一个 const char *variable,这是我需要将其传递给另一个函数的请求格式。

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


int main(int argc, string argv[])
{

    string saltget[2] = { &argv[1][0] , &argv[1][1] };
    printf("%s\n", saltget);

}

您确定要转换 argv[1][0] and argv[1][1] 而不是 argv[1][0] and argv[2][0] 吗?我认为此代码适用于 argv[1][0] and argv[1][1].

int main(int argc, char* argv[])//argv[1] = hello argv[2] = world
{

    const char* saltget[2] = { &argv[1][0] , &argv[1][1] };
    printf("%s\n", saltget[0]);//hello
    printf("%s\n", saltget[1]);//ello

}

如果要转换argv[1][0] and argv[2][0],只需将int main(int argc, char* argv[])改为int main(int argc, const char* argv[])

即可

argv[1][0]的类型是char,所以如果你想构造一个以此字符为首字母的字符串,可以是:

char str [] = {argv[1][0], argv[1][1], '[=10=]'};

请注意,将指针隐藏在 typedef 后面是非常糟糕的做法,因此您应该避免使用 cs50 库,因为它教导了这种糟糕的做法。他们将 "string" 定义为 typedef char *string;。虽然指针隐藏很糟糕,但名称 string 更糟糕,因为名称与 C++ std::string 冲突,因此 reader 在看到代码时会产生很多混淆。