«#Include» текстовый файл в программе на C как символ []

if ($field_professionnel_panier === false) {}

или, если это в вашем магазине объекта:

if ($store->field_professionnel_panier === false) {}

Чтобы ответить на ваш комментарий:

== проверьте, если значения двух переменных вы сравниваете равные

=== проверяет, равны ли они и имеют ли они одинаковый тип (т. е. логическое значение)

122
задан Brian Tompsett - 汤莱恩 15 February 2016 в 21:37
поделиться

6 ответов

Я предложил бы использовать (Unix util) xxd для этого. можно использовать его как так

$ echo hello world > a
$ xxd -i a

выводы:

unsigned char a[] = {
  0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x0a
};
unsigned int a_len = 12;
124
ответ дан 24 November 2019 в 01:23
поделиться

Даже если бы это может быть сделано во время компиляции (я не думаю, что это может в целом), текст, вероятно, был бы предварительно обработанным заголовком, а не содержанием файлов дословно. Я ожидаю, что необходимо будет загрузить текст из файла во времени выполнения или сделать противное cut-n-paste задание.

0
ответ дан 24 November 2019 в 01:23
поделиться

в x.h

"this is a "
"buncha text"

в main.c

#include <stdio.h>
int main(void)
{
    char *textFileContents =
#include "x.h"
    ;

    printf("%s\n", textFileContents);

    return 0
}

должен сделать задание.

-1
ответ дан 24 November 2019 в 01:23
поделиться

То, что могло бы работать, - то, если Вы делаете что-то как:

int main()
{
    const char* text = "
#include "file.txt"
";
    printf("%s", text);
    return 0;
}

Конечно, необходимо будет быть осторожными с тем, что находится на самом деле в файле, удостоверяясь, что нет никаких двойных кавычек, что всех соответствующих символов оставляют и т.д.

Поэтому могло бы быть легче, если Вы просто загружаете текст из файла во времени выполнения или встраиваете текст непосредственно в код.

Если бы Вы все еще хотели текст в другом файле, то у Вас мог бы быть он там, но он должен был бы быть представлен там как строка. Вы использовали бы код как выше, но без двойных кавычек в нем. Например:

file.txt

"Something evil\n"\
"this way comes!"

main.cpp

int main()
{
    const char* text =
#include "file.txt"
;
    printf("%s", text);
    return 0;
}

Таким образом, в основном наличие C или C++ разрабатывает строку в текстовом файле, который Вы включаете. Это сделало бы код более опрятным, потому что нет этой огромной партии текста в начале файла.

2
ответ дан 24 November 2019 в 01:23
поделиться

хорошо, вдохновленный сообщением Daemin я протестировал следующий простой пример:

a.data:

"this is test\n file\n"

test.c:

int main(void)
{
    char *test = 
#include "a.data"
    ;
    return 0;
}

gcc-E test.c вывод:

# 1 "test.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "test.c"

int main(void)
{
    char *test =
# 1 "a.data" 1
"this is test\n file\n"
# 6 "test.c" 2
    ;
    return 0;
}

Таким образом, это работает, но потребуйте данных, окруженных кавычками.

8
ответ дан 24 November 2019 в 01:23
поделиться

У Вас есть две возможности:

  1. Используйте расширения компилятора/компоновщика для преобразования файла в двоичный файл с надлежащими символами, указывающими на начинание и конец двоичных данных. См. этот ответ: Включайте двоичный файл с GNU ld сценарий компоновщика.
  2. Преобразуйте свой файл в последовательность символьных констант, которые могут инициализировать массив. Обратите внимание, что Вы не можете только сделать "" и охватить несколько строк. Вам был бы нужен символ продолжения строки (\), Escape " символы и другие, чтобы заставить это работать. Легче просто записать немного программы для преобразования байтов в последовательность как '\xFF', '\xAB', ...., '\0' (или используйте инструмент Unix xxd описанный другим ответом, если Вы имеете его в наличии!):

Код:

#include <stdio.h>

int main() {
    int c;
    while((c = fgetc(stdin)) != EOF) {
        printf("'\\x%X',", (unsigned)c);
    }
    printf("'\\0'"); // put terminating zero
}

(не протестированный). Затем сделайте:

char my_file[] = {
#include "data.h"
};

Где data.h сгенерирован

cat file.bin | ./bin2c > data.h
14
ответ дан 24 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: