#c #arrays #string #pointers #definition
#c #массивы #строка #указатели #определение
Вопрос:
Я хочу нечто среднее между двумя приведенными ниже объявлениями:
char string[6];
char * string;
Мне нужен указатель с фиксированным размером, и я не хочу использовать malloc
для чего-то такого простого.
Все, что нужно сделать этому массиву символов, это присвоить значение и получить его с помощью функции, как показано ниже. (Но в цикле, отсюда и отдельное объявление) Каков наилучший способ сделать это?
string = "words";
printf("%s",string);
Комментарии:
1. Что не так с
char *
? (Ну, кроме того, что это должно бытьconst char *
.)2. Это просто хорошая форма для использования
const char *
? Или это необходимо? Поскольку для него установлено значение «слова», его нельзя изменить, я понимаю этот момент, но зачем добавлятьconst
?
Ответ №1:
Определите постоянный массив, размер которого подсчитывается инициализатором:
const char string[] = "words";
Если вам просто нужен указатель на небольшой объем памяти фиксированного размера, просто используйте его следующим образом:
const int STR_LEN = 10;
char str[STR_LEN];
... loop, etc
strncpy(string, "1234567890", STR_LEN);
... etc
Комментарии:
1. Я забыл упомянуть, что назначение и доступ должны выполняться в цикле (отсюда и предыдущее объявление)
Ответ №2:
Поскольку вы сейчас заявили, что не можете использовать решение @nightcracker, я думаю, вам нужно использовать strncpy()
для присвоения строке.
char string[6];
/* .... loop code */
strncpy(string, "words", 6);
printf("%s", string);
Я предполагаю, что в реальной программе вы бы не использовали строковый литерал, отсюда и необходимость в strncpy()
.
Комментарии:
1. Этого будет достаточно, я надеялся избежать этого, но это кажется грандиозным.
Ответ №3:
Почему бы не использовать это:
const char * string;
...
string = "words";
printf("%s",string);
(или ваш вопрос неясен)
Комментарии:
1. 1: Согласен. Это отвечает на поставленный вопрос. Если это неуместно, то вопрос нуждается в уточнении.