使用指针从2维字符数组打印字符串

时间:2017-11-21 15:21:58

标签: c

#include <stdio.h>
#include <string.h>

int text(char*);

int main()
{   
    char n[5][100] = {'c'};

    char (*p)[100] = n;

    text(*p);

    return 0;
}

int text(char *p)
{
    for(int i = 0; i<5; i++)
    {
        scanf("%s", p+i);
    }

    printf("%s", (p+2));

    return 0;
}

所以我必须使用2D char数组的指针打印一个完整的字符串。 我声明了一个2D数组,并声明了它的2D指针。 然后我把它传递给功能测试。

当我打印(p + 2)时,我希望它打印第3行。但它的作用是打印从第3行到最后一行的每一行的第一个字符,以及整个最后一行。

错误是什么?

1 个答案:

答案 0 :(得分:2)

您的函数只需指向charchar *的指针。将参数传递给函数时,取消引用你的二维数组:

text(*p);

这意味着您只传递第一个元素(在本例中是第一行)。

由于p是指向单个char的指针,p+2将只是第三个字符。

您需要做的是使用正确的类型:

int text(char (*p)[100]);

调用它
text(p); // <- no dereference!

然后,在你的函数中,你会写例如

printf("%s", p[2]);

或者如果您更喜欢使用指针算术的语法,那么这将是

printf("%s", *(p+2));