Как мне уменьшить указатель символа в c, чтобы указать на определенные первые символы

#arrays #c #string #pointers #decrement

#массивы #c #строка #указатели #уменьшение

Вопрос:

допустим, я объявляю указатель символа следующим образом:

 char *str = "123456";
  

и я хочу указать на вспомогательную строку "123" , как мне уменьшить указатель, чтобы указатель str указывал на 123?

Я знаю, что могу увеличить указатель, чтобы указать на последнюю часть строки:

 // now str will point to 456
str =3;
  

но как насчет начала строки / обрезки конца str строки с помощью оператора decrement -- / -= , возможно ли это?

Комментарии:

1. Технически, "123" это не подстрока в исходной строке, поскольку в этой части нет нулевого завершения "123" .

2. Итак, как мне тогда это назвать?

3. Это не так, как работают строки. Указатель отмечает начало строки (так что он уже указывает на "123" ), но конец строки отмечен символом. Поэтому, если вы хотите str указать на строку "123" , вам нужно заменить символ 4 на

4. Называйте это как хотите, но помните, вы должны сделать это подстрокой, это не так, в его текущей форме.

5. Если вы просто хотите напечатать 3 символа из более длинной строки, вы можете использовать printf("%.3s", "123456"); или int n = 3; printf("%.*s", n, "123456")

Ответ №1:

Я думаю, что вы каким-то образом уже указываете на строку 123 …. единственное отличие заключается в том, что оно заканчивается нулем на 7-м символе после ‘6’, и поэтому вы получаете строку 123456

Если вы ищете «левый» метод, чтобы использовать только начальные 3 символа, вероятно, вам нужно взглянуть на функцию strncpy . В качестве альтернативы вы также можете завершить строку, поместив 4-й символ в null. Во втором случае вы все равно изменяете исходное содержимое, которое у вас было, и теряете информацию.

Комментарии:

1. Не забудьте правильно завершить строки (иначе они не являются строками), полученные из strncpy()

2. Остерегайтесь strncpy , это не обязательно то, что вы думаете.

3. As an alternative, you can also terminate the string by putting the 4th character to null. не будет работать, если источником является строковый литерал.