我的C程序中有传递的参数argv[1]
,我希望将该字符串转换为字符数组。我怎么能这样做?
int main(int argc, char* argv[])
{
char c [] = argv[1]; // This is what I want to do...
}
编辑:
我要做的是从argv[1]
获取某些字符并检查它们是否为数字。所以,理想情况下,我会做类似的事情:
int a = argv[1][2]
但这只会遇到另一个问题 - 如何检查C中变量的类型?
答案 0 :(得分:3)
首先,它已经是一个以NULL结尾的字符数组。您可以通过说char *c = argv[1];
来选择创建指向它的另一个指针,或者您可以使用strcpy(char *destination, char *source)
函数http://www.cplusplus.com/reference/clibrary/cstring/strcpy/将整个字符串(null-terminator和all)复制到另一个数组中这样:
char c[BUFFER]; //This has to be big enough to hold length + 1
strcpy(c, argv[1]);
两种方法都有效。
答案 1 :(得分:3)
您可以将argv[1]
视为它是char
的数组(即,您可以将其下标为argv[1][i]
)。您可以将其作为参数传递给任何不尝试修改它的函数(例如printf
,strtol
,strchr
等。但是,您不能写,因此如果您因任何原因(直接或通过strtok
或strcpy
等函数)需要修改内容,您将会必须创建一个本地副本并操纵它。
如果您使用的是C89或更早版本,请使用此方法:
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char *c = NULL;
if (argc >= 2)
{
c = malloc(strlen(argv[1]) + 1);
strcpy(c, argv[1]);
}
/**
* Do stuff with c
*/
free(c);
return 0;
}
如果您使用的是C99,则可以使用VLA:
#include <string.h>
int main(int argc, char **argv)
{
if (argc < 2)
return 0;
size_t len = strlen(argv[1]);
char c[len+1];
strcpy(c, argv[1]);
/**
* do stuff with c
*/
return 0;
}
请记住以下几点:
argv
的类型是char **
,不是 char *[N]
;同样,argv[i]
的类型为char *
,而非char [M]
。在大多数情况下,这无关紧要;你可以在指针上使用下标运算符,好像它是一个数组(数组下标是定义的指针算术),但请记住指针和数组是不一样的,并不总是可以互换的;
argv[argc]
的值始终为NULL
;
除非它是sizeof
或一元&
运算符的操作数,或者是在声明中用作初始值设定项的字符串文字,否则表达式数组类型的转换(“衰减”)从“N元素数组T”转换为“指向T”,表达式的值是第一个元素的位置;
C没有字符串数据类型;字符串表示为char
的0终止序列。字符串文字(例如"hello"
)以在程序生命周期内存在的方式存储,您可以通过指针值访问它们;尝试修改它们会导致未定义的行为(即,不要这样做)。
答案 2 :(得分:1)
argv[1][2]
类型为char
,总是(&lt; pedantry&gt;访问它会导致未定义的行为,如果少于两个参数或第二个参数的长度小于2 - 所以它在这些情况下是否有类型&lt; / pedantry&gt;)是有疑问的。但是,字符本身可能代表一个数字,要检查该字符,请使用标题isdigit()
中的<ctypes.h>
#include <ctypes.h>
...
if (argc > 1) {
int digits = 0;
for (int i = 0, len = strlen(argv[1]); i < len; ++i)
if (isdigit(argv[1][i]))
digits++;
printf("Digits in %s: %d\n", argv[1], digits);
}
答案 3 :(得分:0)
从技术上讲,argv [1]已经是一个字符数组了。在标准C中确实没有“字符串”这样的东西。
你想用它做什么?你只想要它的副本吗?在这种情况下,您需要为新的字符数组malloc一些空间,然后使用“strcpy”从argv [1]复制到您的字符数组中。