@Vadim1899

Маленький диапазон char?

Всем привет!
Пишу программу: пользователем вводится 2 слова (через разные scanf), над словами проводятся некоторые действия и затем склеиваются (через strcat).
У вводимых слов тип данных - char на 32 элементов каждое слово (в условии длинна слова не более 32 символов).

Но насколько я понял, например числа от 1-9 - это минимум 2-3 символа (0 = \0), и соответственно если слово не более 32 символов, то размер char нужно указывать [96], верно?

Проблема в том, что когда я ввожу два слова, длинной в 32 символа, с результатом творится какая-то дичь.
Пробовал использовать unsigned char, но при таких функциях, как strlen, strcat и т.д. выдает ошибку о несовместимости.
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 3
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
числа от 1-9 - это минимум 2-3 символа (0 = \0)

Бред.
Читайте про типы данных. У вас в голове такая каша из char и *char, что даже страшно представить.
'0' - 0x30, '1' - 0x31 и т.д. до '9' - 0x39.
И 0 != '0' ни в коем случае.
char - один символ. Диапазона 0-255 ему вполне хватает. Вам нужен массив из 33-х символов (почему 33-х? Попробуйте сами ответить на этот вопрос. Пока не ответите, дальше двигаться бессмысленно)
Ответ написан
Комментировать
greatRome
@greatRome
mati it
Без примера кода сложно понять, что за дичь творится
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Так же могут быть проблемы с кодировкой: например программа скомпилирована с поддержкой Unicode и ждет на входе Unicode символы, а консоль работает в однобайтной кодировке (CP1251 или Cp866) или наоборот.
Судя по описанию у вас как раз "наоборот", т.е. на вход вы подаете Unicode, а программа работает с однобайтной кодировкой. Правда символы из младшей половины таблицы ASCII в UTF8 так же занимают 1 байт, поэтому с цифрами и английскими буквами проблем быть не должно, а с русскими уже начнутся.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы