Указатели в c (как указать на первый символ в строке с указателем, указывающим куда-то еще в той же строке) - PullRequest
1 голос
/ 02 декабря 2009

Если у меня есть указатель, который указывает где-то в строке, скажем, он указывает на третью букву (мы не знаем позицию буквы, в основном мы не знаем, что это третья буква), и мы хотим чтобы он указывал на первую букву, чтобы мы могли сделать строку равной NULL, как нам это сделать?

Например:

если у нас есть ascii в качестве указателя ascii указывает сейчас где-то в строке, и я хочу, чтобы он указывал на первый символ строки, как мне это сделать?

(Примечание: Я пытался сказать

int len = strlen(ascii);
ascii -= len;
ascii = '0';

но он не работает, он меняется везде, где указатель равен 0, но не первый символ на 0)

Ответы [ 4 ]

12 голосов
/ 02 декабря 2009

Вы не можете. C и C ++ идут по правилу «без скрытых затрат», что означает, среди прочего, что никто больше не будет тайно хранить указатели на начало ваших строк для вас. Другая распространенная вещь - размеры массива; Вы также должны хранить их сами.

1 голос
/ 02 декабря 2009

Прежде всего, в вашем коде, если ascii - указатель на char, это должно быть

* ascii = '\ 0';

не то, что вы написали. Ваш код устанавливает сам указатель на символ «0». Это означает, что он указывает на плохое место!

Во-вторых, strlen возвращает длину строки, на которую вы указываете. Представьте, что длина строки составляет 10 символов, и вы указываете на третий символ. strlen вернет 8 (так как первые два символа были удалены из расчета). Вычитание этого значения из того места, куда вы указываете, укажет на 6 символов до начала строки. Нарисуйте картинку, чтобы помочь увидеть это.

ИМХО, не имея какой-либо другой информации, невозможно достичь того, что вы хотите сделать.

Из того, что я сказал выше, вы должны быть в состоянии решить, что вам нужно делать, если вы, например, сохраняете исходную длину строки.

0 голосов
/ 02 декабря 2009

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

while(*ascii) ascii--;
ascii++;
0 голосов
/ 02 декабря 2009

Нет. Однако вы можете указать на последний символ строки, который находится перед '\ 0' в каждой строке (она называется строкой с нулем в конце).

То, что вы можете сделать, это вместо символа * вы можете использовать указатель на структуру, которая содержит необходимую вам информацию и строку.

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