Подстроки в C - PullRequest
       33

Подстроки в C

0 голосов
/ 17 октября 2011

Учитывая, что я объявил:

char **string;

Как передать его в другую функцию с подстрокой, начинающейся с определенной позиции?

У меня сейчас есть:

function((*string)[pos])

намереваясь, чтобы это была подстрока, которая начинается в позиции pos. Любой совет?

Ответы [ 5 ]

1 голос
/ 17 октября 2011
char **string;
function((*string) + pos)

или

char *string;
function(string + pos)
1 голос
/ 17 октября 2011

Тип string равен char **.

string относится к типу char **.(указатель на вашу строку)
*string имеет тип char *.(сама строка)
**string имеет тип char.(буква в строке)

Итак, вы хотите сместить в саму строку:

(*string) + pos

, которая будет иметь тип char *.

0 голосов
/ 17 октября 2011

Есть два способа сделать это.Для обоих из них требуется char*, поэтому в вашем случае строка, с которой вы работаете, *string (string - указатель на char*, представляющий строку, поэтому вам нужно разыменовать ее, чтобы получить фактическую строку).

Первое - это простое добавление указателя, как в (*string) + 7.Это дает вам строку, начинающуюся с восьмого символа.

Второй - получить адрес начального символа, как в &((*string)[7]).

Оба они будут «работать», только еслидлина строки не менее восьми символов.Другими словами, не пытайтесь заглянуть за конец строки.

0 голосов
/ 17 октября 2011

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

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

char * x = "Some text";
char * y;
y = x + 5;

Теперь y указывает на строку «текст». http://codepad.org/icVjE6in

Или для извлечения подстроки с определенным началом и концом потребуется использовать это и strncpy .

0 голосов
/ 17 октября 2011

(*string)[pos] обозначает символ в позиции pos. Вы, вероятно, хотите (*string) + pos вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...