Как разделить массив символов - PullRequest
2 голосов
/ 01 февраля 2012

Я пытаюсь разбить массив (string1) из n символов на два символьных указателя, представляющих i символов (char * first) и ni символов (char * second) соответственно.Для второго массива я использовал

char* second = string1+n; 

. Меня интересует, как использовать только первые символы i в первом.Я не хочу выделять больше памяти для двух массивов, я хочу манипулировать строкой 1, чтобы я просто указывал на части того, что уже есть.

РЕДАКТИРОВАТЬ:

Я не могу редактировать строку1.Могу ли я просто привести сначала как-нибудь, чтобы уменьшить длину, не добавляя нулевой символ?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Если вы не выделите больше памяти, вы не сможете использовать «first», как если бы вы использовали любую другую строку C (например, передав ее в строковые функции, printf и т. Д.), Потому что она не заканчивается нулем на границе с « второй».

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

1 голос
/ 01 февраля 2012

Строки в C должны определяться NULL, то есть иметь символ \0 в конце.Например, если у вас есть два слова, разделенные пробелом, например:

char *str1 = "fat chance";

Вы можете «разделить» их, заменив пробел на \0:

str1[3] = '\0';

И затем установите str2, чтобы указать после \0:

char *str2 = str1 + 4;

Однако, если вам нужно что-то разделить, где нет удобного места для вставки терминатора, тогда вам нужноскопировать вторую часть строки в другом месте.Самый простой способ сделать это (если вы не возражаете против необходимости free() позже), это использовать strdup() и поместить терминатор NULL в str1 после этого:

char *str2 = strdup(str1 + 4);
str1[4] = '\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...