C指针无法被printf识别

时间:2018-12-27 20:38:06

标签: 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;
    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;
}

1 个答案:

答案 0 :(得分:3)

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

您还没有在字符串p3的末尾给c留空字节。

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);
}