Определить указатель массива символов с размером

#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: Согласен. Это отвечает на поставленный вопрос. Если это неуместно, то вопрос нуждается в уточнении.