【问题标题】:How to read a string array from input in C and pass to function?如何从 C 中的输入中读取字符串数组并传递给函数?
【发布时间】:2021-02-20 08:41:36
【问题描述】:

我一整天都被困在这上面。我希望能够在 C 中创建一个字符串数组,并将该数组传递给 PrintStuff 函数。我不想将我的参数更改为 PrintStuff,但仍然让它工作。请问有什么帮助吗?

void PrintStuff(const char **arr) {
  for (int i = 0; i < 5; ++i) {
        printf ("%s\n", arr[i]);
    }
}

int main ()
{
    //This works
    //char * array[5] = { "this", "is", "a", "test", "megan"};

    //This doesn't work
    char * array[5];
    for (int i=0;i<5;i++)
    {
        //scanf("%9s", array[i]);
        fgets(array[i], 10, stdin);
    }

    Sort(array, 0, 5 - 1);
}

它什么也没做,我收到这样的警告

将 'char *[5]' 传递给 'const char **' 类型的参数会丢弃 嵌套指针类型中的限定符 [-Wincompatible-pointer-types-discards-qualifiers]

我不知道这意味着什么或如何解决它,请帮助我!!!!!!!

【问题讨论】:

  • 你有五个指针。他们指向哪里?无处。您必须分配一些空间。
  • 查看函数malloc,但请确保检查返回值是否有错误。你也应该为fgets 这样做。

标签: arrays c string function


【解决方案1】:

首先了解什么是char* array[5]

这不过是指向 char* 的 5 个指针的数组,因此您需要为每个指针提供内存才能使用它们。

char* array[5] = NULL;
int noe = sizeof(array) / sizeof (array[0]);

for(int a = 0; a < noe; a++) {
    if( !(array[a] = malloc(BUFFER_SIZE))
        printf("malloc failed at %d entry\n", a);
}

用完后别忘了释放它们

for(int a = 0; a < noe; a++) {
    if(array[a]) {
        free(array[a]);
        array[a] = NULL;
    }
}

【讨论】:

  • 你也可以像char array[5][100];这样静态分配一些空间。
  • @DanielWalker,是的,我们可以,因为 OP 使用指针,所以建议这样做。
  • @klutt,你说得对,我只是将 5 个指针的数组写成 5 个指向 5 个数组的指针,不确定 OP 是否理解我说的指针数组,但我可以更正。
猜你喜欢
  • 2023-03-29
  • 2021-12-16
  • 1970-01-01
  • 2019-03-18
  • 2017-04-05
  • 1970-01-01
  • 2015-09-09
  • 2022-01-13
  • 1970-01-01
相关资源
最近更新 更多