Есть ли какая-либо функция библиотеки C, которая копирует массив char (содержащий несколько символов '\0') в другой массив char, не копируя '\0'?
Например, "he\0ll\0o" следует скопировать как "hello".

-1
Yoghi 28 Апр 2017 в 15:10

3 ответа

Лучший ответ

Пока вы знаете, какова длина массива char:

void Copy(const char *input, size_t input_length, char *output)
{
  while(input_length--)
  { 
     if(input!='\0')
        *output++ = input;
     input++;
   }
   *output = '\0'; /* optional null terminator if this is really a string */
}

void test()
{
     char output[100];
     char input = "He\0ll\0o";
     Copy(input, sizeof(input), output);
 }
3
Neil 28 Апр 2017 в 13:02

'\ 0' в строках - это метод для поиска конца строки (завершающий символ для строк). Итак, все функции, предназначенные для строковых операций, используют '\ 0' для обнаружения конца строки.

Теперь, если вам нужна такая реализация, о которой вы просили, вам нужно создать свою собственную.
Проблема, с которой вы столкнетесь:
1) как вы определите, какой '\ 0' используется в качестве завершающего символа?
Таким образом, для такой реализации вам нужно явно указать счетчик '\ 0', используемый в качестве завершающего символа, или вам нужно установить собственный завершающий символ для строк.
2) Для любых других операций в вашей реализации вы не можете использовать предопределенные функции, связанные со строками.
Итак, реализуйте свои собственные функции для выполнения этих операций.

0
anil 28 Апр 2017 в 12:35

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

Однако один вопрос: как узнать, когда прекратить игнорировать \0? Ваша строка ("he\0ll\0o") имеет три нулевых байта. Как вы знаете, чтобы остановиться на третьем?

0
pmg 28 Апр 2017 в 12:19