C 逐字符打印字符串数组

C 逐字符打印字符串数组,c,arrays,C,Arrays,我还不太熟悉C语言,还面临着另一个问题。通常我从这里找到了问题的答案,但这次我没有。可能有一个,但无论如何 这是交易。我有一个字符串数组,我想打印它们,每个项目都有自己的行。数组以NULL结尾 这是我在atm机上得到的代码的简化版本 print_my_array(char *array[]) { while(*array != NULL){ char *item = *array; while (item) {

我还不太熟悉C语言,还面临着另一个问题。通常我从这里找到了问题的答案,但这次我没有。可能有一个,但无论如何

这是交易。我有一个字符串数组,我想打印它们,每个项目都有自己的行。数组以NULL结尾

这是我在atm机上得到的代码的简化版本

print_my_array(char *array[])
{ 

    while(*array != NULL){
        char *item = *array;
        while (item)
        {
            int i = 0;
            printf("%c", item[i]);
            i++;
        }
        printf("\n");
        array++;
    }

}

这就是我相信我的代码所做的。我有一个名为array的数组。我获取名为item的指针,并用它指向数组中的第一个项。然后我在项目上循环并逐个打印所有字符。完成项目后,我将打印\n并通过移动数组指针并从头开始循环移动到下一个项目

内部循环错误:

while (item)
{
  // all your code
}
应该是

while (*item)
{
  printf("%c", *item++);
}

当然,使用
printf(“%s\n”,*array++)更有意义并完全跳过内部循环。

我做了一个示例函数,在该函数中,使用一个位置在数组中循环,直到它得到一个空值。稍后,您会看到是否打印了某些字符,它会告诉您数组是否为空:

 exampleFunction(char array[]){
        int position = 0;

        while(array[position]) {
            printf("%c\n", array[position]);
            position++;
        }

        if(position == 0){
            printf("The array was void.");
        }
}

我没有使用指针,但我认为它仍然有效。我希望这有帮助

printf(“%s\n”,*array++)这不是UB吗?不,为什么会是?哦,太酷了,谢谢@unwind'printf(“%s\n”,*array++);'工作抱歉,我的错,我需要咖啡我想@E先生担心的是,
array
参数的类型似乎是指向char的指针的
array,通常不能修改数组类型的变量。例如
char*a[30];a++将是非法的。但是对于数组类型的参数有特殊的处理——它们被等同于指针。因此,该行为就像您有
void print\u my\u数组(char**array){…}