2017-07-16 41 views
0
的Array

如果我有这两个命令行参数,是有可以采取第二个命令行参数,它是含26个字符,分离的所有字母的单个字的方式和把它们放入一个新的字符数组中?Ç - 存储命令行参数为CHAR

./substitution qwertyuiopasdfghjklzxcvbnm 

我试过使用这种语法,但我不确定它是否有效?

char mapping[] = argv[1]; 

我认为这种说法会造成字符称为映射的一个新的数组,并将其分配给一个字符串,因为我假设argv[1]是一个字符串。然后每个索引将根据命令行参数具有各自的字符:

mapping[0] = 'q' 
mapping[1] = 'w' 
... 

任何提示将不胜感激! :)

+1

这并没有多大意义,一个** **串中C被存储在字符*的*阵列('的argv [1]'** **是字符*的*数组)。 –

+0

很抱歉,如果它没遇到过,但显然从我的理解的argv [1]是一个字符串,但我想采取的argv [1]的内容并把它变成另一个数组,字符串中的所有字符都分离出来并且是新阵列 –

+3

'char mapping [strlen(argv [1])+ 1]的元素; strcpy(mapping,argv [1]);' – BLUEPIXY

回答

2

你不能将值分配给这样的一个数组。但是您可以使用指针。 argv是一个指向null终止字符串的指针数组。这意味着它们在末尾具有ASCII值为零的字符'\ 0'。

char *mapping = argv[1]; 

now mapping指向第一个参数。 ,如果你需要的第一个参数的副本,你应该与mallocstdlib.h)函数的字符串分配足够的内存,然后将其与strcpystring.h)复制到该存储器块。

char *mapping = malloc(strlen(argv[1]) + 1); //strlen returns the size of the string not including the null character at the end. 
strcpy(mapping,argv[1]); 
... 
free(mapping);//then you will have to free the allocated space when you are done with it. 

现在mappingargv[1]拷贝,并修改它不会影响argc[1]

+0

谢谢@DavidBowling我会更正答案。 –

+0

更好。另外,请注意标准不要求字符编码为ASCII,并且有一些使用中的替代编码(例如[EBCDIC](https://en.wikipedia.org/wiki/EBCDIC))。 [对字符编码有最小的限制](http://port70.net/~nsz/c/c11/n1570.html#5.2.1),其中之一是应该表示'\ 0'由所有位设置为0的一个字节。 –