LINUX.ORG.RU

Лишние символы в конце строки - C

 , , ,


0

1

Я выполняю операции декодирования, записываю всё это в массив длиной 5000, и конвертирую его в понятный для программы формат. В большистве случаев строка отображается нормально, но в некоторых выдаёт такое: «SourceX\x06». В норме выдаёт «Source».

Это мой код:

char string[5000] = {‘S’,‘o’,‘u’,‘r’,‘c’,‘e’,‘\0’};

char *out = malloc(strlen(string) + 1);

strcpy(out, string);

return out;

Помогите, я не знаю в чём дело, пробовал уменьшать длину массива до 6, убирал при этом +1, но не помогло, в конце опять этот бред.



Последнее исправление: gradle (всего исправлений: 2)
Ответ на: комментарий от anonymous

Где здесь проблема? Если я возвращаю просто «Source» вместо конвертирования, таких символов в конце нет. Это вообще образец из интернета, сам я так и не додумался, как в этом мегасложном C работать с текстом. Вообще отвратительный язык, хуже java в 100 раз.

gradle
() автор топика
Ответ на: комментарий от gradle

как в этом мегасложном C работать с текстом

Си не работает с текстом. Он работает с байтами.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Может попробовать удалить просто последний символ из out, если он не соответствует последнему символу в string? Но я не знаю как это сделать

gradle
() автор топика
Ответ на: комментарий от gradle

Вообще отвратительный язык, хуже java в 100 раз.

Звучит примерно как «КАМАЗ отвратительная машина, хуже Матиза в 100 раз». Он просто немного для другого, и работа со строками там действительно боль. Но не стоит своё неосиляторство переносить на язык.

Если есть возможность, посмотри на C++. Он почти так же эффективен, как C, но строки там человеческие.

Если нет — разбирайся с длинами и выделяемой памятью. Я вот вижу у тебя return out, значит, это всё же не самостоятельная программа, а функция, которая вызывается откуда-то извне. И возвращаемый результат, видимо, char*, я угадал?

Судя по коду, проблемы где-то таки за его пределами (строку эту ты где-то, наверное, выводишь?) Память освобождается тоже где-то ещё. Возможно, освобождается до того, как ты выводишь строку. В общем, не видя полного кода, гадать и не угадывать можно бесконечно.

hobbit ★★★★★
()
Ответ на: комментарий от crutch_master

Ну так пусть новый функционал на скриптоне пишет.

Deleted
()
Ответ на: комментарий от gradle

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от gradle

Вообще отвратительный язык, хуже java в 100 раз.

Так не пиши на нём.

andalevor ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.