c - 如何创建类似 char *argv 的 char 指针

标签 c pointers 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 数组是在调用 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; }

但我最终在编译时收到警告,并在执行时收到核心转储。

最佳答案

你想要的是一个指针数组。所以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;
}

关于c - 如何创建类似 char *argv 的 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28392047/

相关文章:

c - 将带有 for 循环的递归函数转变为纯递归

c++ - 打印时指向常量的指针与指向非常量的指针的行为不同

c - 如何验证 ARGV 中的 key ?

python - 限制命令行输入数量的替代方法

c - 客户端到服务器消息中带有 scanf 的空格。 C

C中的循环链表

c - 访问 C 结构中指针的地址

c++ - 在 C++ 中。 (*a).b 和 a->b 有什么区别?

c++ - 将 argv 保存为 vector 或字符串

c - 汇编 - 如何找到一个函数为自己分配了多少堆栈空间