#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行到最后一行的每一行的第一个字符,以及整个最后一行。
错误是什么?
答案 0 :(得分:2)
您的函数只需指向char
:char *
的指针。将参数传递给函数时,取消引用你的二维数组:
text(*p);
这意味着您只传递第一个元素(在本例中是第一行)。
由于p
是指向单个char
的指针,p+2
将只是第三个字符。
您需要做的是使用正确的类型:
int text(char (*p)[100]);
用
调用它text(p); // <- no dereference!
然后,在你的函数中,你会写例如
printf("%s", p[2]);
或者如果您更喜欢使用指针算术的语法,那么这将是
printf("%s", *(p+2));