C - Относительно объявления препроцессора строки - PullRequest
0 голосов
/ 09 мая 2018

Итак, я получил небольшую часть программы, набранную из учебника.

#include <stdio.h>
#define string char* 


int main(void) {
    string a[] = { "I", "like", "to", "fight," },
    b[] = {"pinch,","and","bite."};

    printf("%s %s %s %s %s %s %s\n", a[0], a[1], a[2], a[3], b[0], b[1], b[2]);

    return 0;
}

В текущем виде выдает следующие ошибки:

exit status 1
main.c: In function 'main':

main.c:7:18: error: excess elements in char array initializer
  b[] = {"pinch,","and","bite."};

main.c:7:18: note: (near initialization for 'b')

main.c:7:24: error: excess elements in char array initializer
  b[] = {"pinch,","and","bite."};

main.c:7:24: note: (near initialization for 'b') 

Очевидно, что цель состоит в том, чтобы сделать эту работу. Книга намекает на то, что в препроцессоре #define можно добавить один отдельный символ, чтобы он работал. И с ошибками, сосредоточенными вокруг строки b, я думал, что это будет b. Но это не так. Либо это, либо я ставлю b в неправильном месте. Мое понимание этой проблемы заключается в том, что, хотя она создает достаточно места для строки, она не для строки b.

Любой вклад будет оценен.

1 Ответ

0 голосов
/ 09 мая 2018

Ну, если бы у вас было

int *a, b;

Вы, вероятно, быстро увидите, что у вас есть один указатель типа int и один тип int. То же самое происходит с вашим кодом

string a[] = { "I", "like", "to", "fight," },
b[] = {"pinch,","and","bite."};

изменяется на

char* a[] = { "I", "like", "to", "fight," },
b[] = {"pinch,","and","bite."};

так что у вас есть один массив указателей на символы и один массив символов. Единственный символ, который вам нужно добавить, это *, чтобы сделать b массивом указателей на символы.

char* a[] = { "I", "like", "to", "fight," },
*b[] = {"pinch,","and","bite."};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...