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)
Ответ на: комментарий от gradle

Ну если ты так уверен, то о чём тред тогда? Ошибки нет, расходимся.

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

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

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

Ох, тяжёлый день пятница… Я хотел написать, что тебе уже 100 раз написали, что в тех кусках, что ты приводишь, ошибок нет. Но упорно не хочешь собирать минимальный пример с ошибкой.

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

Я еле разобрался с этим, как же я ненавижу C! Неделю потерял из-за этого! Вся причина была в том что я забыл передать в конце строки во время преобразований ‘\0’, в двух местах сразу, а декодер у меня особенный, если получит слишком много неверных символов, вернёт пустую строку, поэтому она то пустая была то с двумя символами, смотря какой мусор. Никто мне здесь это даже не подсказал, умники.

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

Вся причина была в том что я забыл передать в конце строки во время преобразований ‘\0’, в двух местах сразу

Так в приведённых кусках кода этого не было.

Никто мне здесь это даже не подсказал, умники.

Телепаты в отпуске. Привёл бы соответствующий кусок кода, причём в нормально отформатированном виде, как тебя несколько человек просило — результат мог быть другим.

Неделю потерял из-за этого!

Для начинающего это нормально.

как же я ненавижу C!

Си — переносимый ассемблер, он никому не обязан быть лёгким.

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

Зачем ты используешь Си, если в нём не шаришь? Вероятно, и задача для него у тебя не подходящая.

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

Он писал, что его задача — пропатчить чужую библиотеку, так что выбор невелик.

Другое дело, что раз уж возникла такая задача, надо всегда помнить про чужой монастырь и не перекладывать своё неосиляторство на язык…

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