从 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 在看到代码时会产生很多混淆。
我确定之前已经回答过这个问题,但我无法全神贯注于这些答案。我正在学习入门 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 在看到代码时会产生很多混淆。