[英]How to create a similar char pointer like char *argv
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数组是在调用主函数之前创建的,并且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; }
但最终在编译时出现警告,在执行时出现核心转储。
您想要的是一个指针数组。 所以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;
}
您可以使用类似的指针数组
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
您可以使用简单的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
在索引阵列x
,从而argv[x]
是一个char*
,指向第一char
在字符串(一个char
数组)。
argv[x][y]
在索引y
处访问char
数组argv[x]
,因此argv[x][y]
是char
,它是char
数组字符串中的一个元素。
您的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]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.