Указатели на C не распознаются printf - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь создать простые указатели для тестирования приложений на 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 голосов
/ 27 декабря 2018

Вы объявили p3 как массив указателей вместо массива символов.Затем вы передаете *p3 в strcpy, который является неинициализированным указателем, который затем пытается разыменовать недопустимый указатель, вызывая неопределенное поведение .

Вы также не указали 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...