printf无法识别C指针

printf无法识别C指针,c,C,我正在尝试构建一个简单的C应用程序测试指针。但是,没有输出,我不确定为什么 void printSummary(int *a, float *b, char *c[]) { printf("Summary: \n A: %d\n B: %.1f\n C: %s\n", *a, *b, *c); } int pointersChanging () { // init variables int a = 10; float b = 20.0;

我正在尝试构建一个简单的C应用程序测试指针。但是,没有输出,我不确定为什么

void printSummary(int *a, float *b, char *c[]) {
    printf("Summary: \n  A: %d\n  B: %.1f\n  C: %s\n", *a, *b, *c);
}

int pointersChanging () {
    // init variables
    int a    = 10;
    float b  = 20.0;
    char c[] = "Hello, World!";

    // Init pointer variables
    int *p1 = &a;
    float *p2 = &b;
    char *p3[strlen(c)]; /* init new char sequence using the length of c */

    strcpy( *p3, c); /* copy c into *p3 (the value of p3) */

    printSummary(p1,p2,p3);

    return 0;
}

int main(void)
{
    pointersChanging();

    return 0;
}

您已将
p3
声明为指针数组,而不是字符数组。然后将
*p3
传递给
strcpy
,它是一个未初始化的指针,然后尝试取消对无效指针调用的引用

您还没有为字符串
c
末尾的空字节提供
p3
空间

p3
更改为
char
数组,并给它一个额外的字节空间:

char p3[strlen(c)+1];
strcpy( p3, c);
并更改
printSummary
以匹配:

void printSummary(int *a, float *b, char c[]) {
    printf("Summary: \n  A: %d\n  B: %.1f\n  C: %s\n", *a, *b, c);
}

我的错,我应该解释的。它只调用pointersChanging函数
p3
是strlen(c)指针的数组,为什么需要它?单个字符指针足以指向
c
char*p3[strlen(c)]是指针数组
*p3
(与
p3[0]
)相同)是一个统一的指针。您不能
strcpy()
插入其中。请发布一个,以便我们可以帮助您调试问题发布的代码无法编译!除其他事项外,它缺少所需头文件所需的
#include
语句。您是否希望我们猜测您的实际代码包含哪些头文件?这是可行的,但p3变量的要点是在此上下文中使用指针变量。您建议的代码只是从p3变量中删除指针元素,实质上使其成为c变量。@RyanCocuzzo那么您根本不需要数组。只需将
p3
声明为指针:
char*p3=c。生成输出:
摘要:A:10