Инициализация символа* []

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

@media only screen and (max-width: 320px){font-size: 3em;}

Размер шрифта будет 3em как для ширины 300px, так и 200px. Но вам нужен более низкий размер шрифта для ширины 200 пикселей, чтобы обеспечить отличную реакцию.

Итак, каково реальное решение? Есть только один способ. Вы должны создать изображение png (с прозрачным фоном), содержащее ваш текст. После этого вы можете легко реагировать на изображение (например: ширина: 35%, высота: 28 пикселей). Таким образом, ваш текст будет полностью отвечать всем устройствам.

25
задан Romain 10 February 2010 в 10:31
поделиться

7 ответов

Хотя вы, вероятно, знаете, char * [] - это массив указателей на символы, и я предполагаю, что вы хотите сохранить несколько струны. Инициализировать массив таких указателей так же просто, как:

char ** array = new char *[SIZE];

... или, если вы выделяете память в стеке:

char * array[SIZE];

Тогда вы, вероятно, захотите заполнить массив циклом, например:

for(unsigned int i = 0; i < SIZE; i++){
    // str is likely to be an array of characters
    array[i] = str;
}

As отмечено в комментариях к этому ответу, если вы выделяете массив с новым (динамическое размещение), не забудьте удалить свой массив с помощью:

delete[] array;
19
ответ дан 28 November 2019 в 20:49
поделиться

В зависимости от того, что вы хотите инициализировать, вы можете сделать любое из:

char mystr[] = {'h','i',0};
char * myotherstring = "my other string";
char * mythirdstring = "goodbye";

char * myarr[] = {0};
char * myarr[] = {&mystr, myotherstring};
char * myarr[10];
char * myarr[10] = {0};
char * myarr[10] = {&mystr, myotherstring, mythirdstring, 0};

и т. Д. и т.д.

11
ответ дан John Weldon 28 November 2019 в 20:49
поделиться

Вот так:

char p1 = 'A';
char p2 = 'B';
char * t[] = {&p1, &p2};

std::cout << "p1=" << *t[0] << ", p2=" << *t[1] << std::endl;

Но почему-то я считаю, что это не ответ на реальный вопрос ...

Если вы хотите, чтобы массив строк C определялся во время компиляции, вы должны использовать вместо него массив const char *:

const char * t2[] = {"string1", "string2"};

std::cout << "p1=" << t2[0] << ", p2=" << t2[1] << std::endl;

Без const мой компилятор сказал бы: предупреждение: не рекомендуется преобразование из строковой константы в 'char *'

2
ответ дан kriss 28 November 2019 в 20:49
поделиться
#include <iostream>

int main(int argc, char *argv[])
{
    char **strings = new char *[2]; // create an array of two character pointers
    strings[0] = "hello"; // set the first pointer in the array to "hello"
    strings[1] = "world"; // set the second pointer in the array to "world"

    // loop through the array and print whatever it points to out with a space
    // after it
    for (int i = 0; i < 2; ++i) {
        std::cout << strings[i] << " ";
    }

    std::cout << std::endl;

    return 0;
}
1
ответ дан xian 28 November 2019 в 20:49
поделиться

Как и любой другой массив:

char *a, *b, *c;
char* cs[] = {a, b, c}; // initialized
cs[0] = b; // assignment
1
ответ дан 28 November 2019 в 20:49
поделиться

Вот так:

char* my_c_string;
char* x[] = { "hello", "world", 0, my_c_string };
7
ответ дан 28 November 2019 в 20:49
поделиться

Если вам действительно нужен массив постоянных строк в стиле C (например, индексированные сообщения):

const char* messages[] =
{
    "Beginning",
    "Working",
    "Finishing",
    "Done"
};

Если же вы пытаетесь поддерживать контейнер переменных строк во время выполнения, то использование средств C++ std::vector значительно упростит учет всех операций с памятью.

std::vector<std::string> strings;
std::string my_string("Hello, world.")
strings.push_back("String1");
strings.push_back(my_string);
2
ответ дан 28 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

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