C语言中使用的命令行指针char * argv []允许执行诸如;
之类的操作ptintf ("%c", argv [3][6]); // to print the 7th element of 4th argument
printf ("%s", argv [3]); // to print the 4th parsed argument
现在我明白argv char数组是在调用main函数之前创建的,而char * argv []只是一个指向编译器创建的数组的指针。
我们如何在C代码中创建一个指针,这将允许类似的操作?
我试过了,
#include <stdio.h>
int main() {
char array [20] [20];
char *ptr_array = array ;
array [0] [0]= 'a';
array [0][1]= 'b';
array [0] [2] = '\0';
array [1] [0]= 'a';
array [1][1]= 'b';
array [1] [2] = '\0';
array [2] [0]= 'a';
array [2][1]= 'b';
array [2] [2] = '\0';
// assuming there is content in the array
printf("%s\n", ptr_array [1]);
return 0; }
但我最终会在编译时发出警告,并在执行时发出核心转储。
答案 0 :(得分:1)
您可以使用像
这样的指针数组int main() {
char *ptr_array[5] = { "ab","cd", "ef","gh" };
printf("%s\n", ptr_array [1]);
return 0;
}
如您所见,argv是一组指针char *argv []
,您可以提出与上面所示相同的内容。
请注意,这里的ptr_array只是可读的,你可以通过分配内存或使指针指向可写内存来使其可写。
int main() {
char *ptr_array[5];
char str[20];
int i=0;
for(i=0;i<5;i++)
{
ptr_array[i] = malloc(20);
scanf("%s",str);
strcpy(ptr_array[i],str);
}
printf("%s\n", ptr_array [1]);
return 0;
}
PS:argv
可以是*argv[]
或**argv
答案 1 :(得分:1)
你想要的是一个指针数组。所以ptr_array
的声明应该是
char *ptr_array[20]; // an array of 20 pointer-to-char
以下代码使用strcpy
填写array
中的两个字符串。 {{0}}
确保所有其他字符串都归零。然后声明ptr_array
并初始化所有20个指针。最后打印出一个字符串。
int main( void )
{
char array[20][20] = {{0}};
strcpy( array[0], "hello" );
strcpy( array[1], "world" );
char *ptr_array[20];
for ( int i = 0; i < 20; i++ )
ptr_array[i] = array[i];
printf( "%s\n", ptr_array[0] );
return 0;
}
答案 2 :(得分:0)
只需array
即可完成您想要的任务。无需ptr_array
。
char array[20][20];
// array initialization
printf("%s\n", array[1]);
printf("%c\n", array[1][1]);
argv
是一个char数组的数组。与上述代码中的array
完全相同。
命令行参数作为字符串传递(char
数组),argv
是包含所有字符串的数组。
关于使用*
和[]
:
char array[10];
array
现在是指向该数组中第一个元素的指针,因此它是char*
。
例如,char* argv[]
与char** argv
相同:
argv
是指向包含char*
元素的数组中第一个元素的指针,因此它是char**
。
argv[x]
访问索引为argv
的{{1}}数组,因此x
为argv[x]
,指向第一个char*
在一个字符串(一个char
数组)。
char
访问索引为argv[x][y]
的{{1}}数组char
,因此argv[x]
为y
,是argv[x][y]
数组字符串。
答案 3 :(得分:0)
您的array
类型为char[20][20]
。
在大多数情况下,简单地使用array
将其转换为指向其第一个元素的指针:&(array[0])
,其类型为(*)char[20]
(指向char数组20的指针)。
您可以将此地址指定给相同类型的指针:
char array[20][20];
char (*ptr_array)[20]; // ptr_array is a pointer to an array of 20 char
ptr_array = array; // types of ptr_array and (the converted) array are compatible
printf("%s\n", ptr_array[1]);