Что конкретно делает NPTR и почему он не компилируется в c? - PullRequest
0 голосов
/ 16 апреля 2020

Основываясь на некоторых кодах, которые я нашел из переполнения стека, я написал следующие коды:

char *split[NPTR] = { NULL }, **p = split;

Я не совсем понимаю, почему первая переменная должна быть в массиве символов, который имеет NPTR с назначенным {NULL}. Есть ли что-нибудь отличное от char *split[] = NULL?

Также, когда я запускаю код, коды выдают ошибку ниже:

error: NPTR' undeclared (first use in this function)
note: each undeclared identifier is reported only once for each function it appears in

1 Ответ

0 голосов
/ 16 апреля 2020
char *split[] = NULL

Это недопустимая инициализация

char *split[NPTR] = { NULL };

Это означает, что split - это массив, содержащий NPTR указателей. Каждый указатель инициализируется значением NULL.

#define NPTR 32

В вашем комментарии это означает, что мы определяем NPTR = 32 как постоянное значение.

См. Код ниже, чтобы понять больше:

#include <stdio.h>
// define NPTR = 3;
#define NPTR 3

int main()
{
    char * split[NPTR] = {NULL};
    for(int i = 0; i < 3; i++) {
       if(split[i] == NULL)
            printf("ptr[%d] = NULL\n", i);
    }
    split[0] = "abc";
    split[1] = "cdf";
    split[2] = "ijk";

    for(int i = 0; i < 3; i++) {
        printf("%s\n", split[i]);
    }

    return 0;
}

Результат:

ptr[0] = NULL                                                                                                           
ptr[1] = NULL                                                                                                           
ptr[2] = NULL                                                                                                           
abc                                                                                                                     
cdf                                                                                                                     
ijk
...