Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > как в char записать больше 255 символов?


Автор: dembel 29.2.2008, 16:45
подскажите, как в переменую типа char записать больше 255 символов?

Автор: Goganchic 29.2.2008, 16:56
dembel, извини, но ты сам понял что спросил?

Автор: baldina 29.2.2008, 17:18
Переменная типа char - 8бит
2^8=256 
так что больше, извини, не выйдет  smile 

Автор: dembel 29.2.2008, 17:35
Цитата(baldina @ 29.2.2008,  17:18)
Переменная типа char - 8бит
2^8=256 
так что больше, извини, не выйдет  smile

а какаю нужно использовать переменную, которая бы вмещала бы долее 256 символов

Автор: Alek86 29.2.2008, 17:38
Цитата(dembel @  29.2.2008,  16:45 Найти цитируемый пост)
подскажите, как в переменую типа char записать больше 255 символов?

легко!
найди платформу, где char имеет размер больше 8 бит и вперед!
если же sizeof(char) == 1 по Стандарту (я не нашел), то
Код
#define char int

и дерзай

Бог в помощь

Автор: baldina 29.2.2008, 17:40
short - обычно 16 бит, 65536 значений
long - обычно 32бита, много значений ;-)

Добавлено через 1 минуту и 19 секунд
только вопрос действительно странный - не 256 символов, а 256 значений.
для множества символов нужен символьный массив

Автор: Alek86 29.2.2008, 17:42
baldina, есть еще wchar_t

Автор: baldina 29.2.2008, 17:45
Alek86, да еще много чего есть

Автор: Alek86 29.2.2008, 17:48
но только char и wchar_t подходят под определение "символ"

Автор: vinter 29.2.2008, 17:52
по моему вы не понимаете о чем человек спросил, ему видимо не нравиться ограничение строки в 255 символов.

Автор: baldina 29.2.2008, 17:54
Цитата

ему видимо не нравиться ограничение строки в 255 символов


возможно. но интересно, откуда такое ограничение.

Добавлено @ 17:54
телепатия - дело тонкое...

Автор: Mayk 29.2.2008, 17:55
Цитата(vinter @  29.2.2008,  21:52 Найти цитируемый пост)
по моему вы не понимаете о чем человек спросил, ему видимо не нравиться ограничение строки в 255 символов. 

В си строки не ограничены 255 символами. это не исторический паскаль.

Автор: codelord 29.2.2008, 17:59
просто по моему человек не правильно понял назначение типа char
char это не 
Цитата(dembel @  29.2.2008,  12:45 Найти цитируемый пост)
 255 символов? 

Это 1 символ чтобы было больше нужно больше 255 char -ов
например 
char abra[1024]; // здесь 1024 символа т/е массив из 1024 char
надеюсь разницу уловил. 
вообще юзай std::string если тебе нужно работать со строками.

Автор: dembel 29.2.2008, 18:01
Цитата(Mayk @  29.2.2008,  17:55 Найти цитируемый пост)
В си строки не ограничены 255 символами. это не исторический паскаль.

У меня есть программа которая разбивает строку на слова (массивы из 12 элементов), и выводит это все, аозникла проблема первые 16 слов выводит а дальше нет, 17,18.....n не выводит

Автор: codelord 29.2.2008, 18:02
да не сказал для человека выше 255 это ограничение 8 бит в пределах одного байта
те  не путаем  мух и котлеты

Автор: Alek86 29.2.2008, 18:02
код можно поглядеть?

Автор: codelord 29.2.2008, 18:02
Цитата(dembel @  29.2.2008,  14:01 Найти цитируемый пост)
У меня есть программа которая разбивает строку на слова (массивы из 12 элементов), и выводит это все, аозникла проблема первые 16 слов выводит а дальше нет, 17,18.....n не выводит 

код в студию

Автор: vinter 29.2.2008, 18:17
Цитата(codelord @  29.2.2008,  19:02 Найти цитируемый пост)
код в студию

а ты сам собери что нибудь на BC 3.1 например, и увидишь smile

Автор: dembel 29.2.2008, 18:24
Код

сhar WordTxt[32][256];
char* token;
int i = 0, j;
token= new char [256];
if (token = strtok(codetext, " "))
 {
  strncpy(WordTxt[i++], token, 256);
  while (token = strtok(NULL, " "))
  strncpy(WordTxt[i++], token, 256);
 }

codetext- это строка которая береться из файла.

Ошибку получилось исправить вписав вместо 256 цифру 4096, но через некоторое время работы програмы выскакивает ошибка

Автор: codelord 29.2.2008, 18:58
у меня на данном примере ошибка не воспроизводится
надо видеть больший код подозрение на выход за границы WordTxt
+ надо видеть данные на которых споткнулась прога и реально ли все что ты грузишь вмещается  в объявленный массив [32][256]
если можешь отредактируй фрагмент ниже чтобы ошибка воспроизвелась  
Код

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
 while( true ) 
 { 
 char codetext[] = "erk lwkjr l kewjre ljrklk l ewrlkjewr ";
 char WordTxt[32][256];
 char *token = new char[256];
 int i = 0, j;
 if (token = strtok(codetext, " "))
 {
  strncpy(WordTxt[i++], token, 256);
  while (token = strtok( NULL, " " ) )
  strncpy(WordTxt[i++], token, 256);
 }
 for( int k = 0; k < i; ++ k )  
    { 
        printf( "%s\n", WordTxt[k] );
    }
  delete[] token; 
 }
 return 0;
} 


Автор: prof_GCC 29.2.2008, 21:53
[quote]
У меня есть программа которая разбивает строку на слова (массивы из 12 элементов), и выводит это все, аозникла проблема первые 16 слов выводит а дальше нет, 17,18.....n не выводит
[/quotе]
Это не тип char виноват, выложи код скажем где ошибка, мы не телепаты, а вопрос действительно некорректный

Добавлено через 5 минут и 40 секунд
А приведенный код говорит только о твоем не профессианолизме, где гарантия что там всего 32 слова? Кроме того пишешь код на C пиши на С, а если юзаешь С++ то почему не использовать string

Автор: ShavarRsh 29.2.2008, 23:14
 smile  В переменную типа сhar можно записать только один символ. Туда даже два символа не поместятся, не говоря уже о 256  smile 

Автор: prof_GCC 1.3.2008, 09:39
Естественно это уже говорилось и не раз, тип char это всего лишь один байт, и как не крути туда не всунешь больше одного символа, просто человек вопрос не корректно составил, он думал, что строка не может быть больше 255 символов, поэтому я и поясняю что строка символов, это всего навсего массив char ограниченный 0 т.е. в char a[256] поместится строка из 255 символов, а размер его ограничен только твоей фантазией и размерами ОЗУ smile

Автор: vinter 1.3.2008, 15:46
Цитата(prof_GCC @  1.3.2008,  10:39 Найти цитируемый пост)
 это всего навсего массив char ограниченный 0 т.е. в char a[256] поместится строка из 255 символов, а размер его ограничен только твоей фантазией и размерами ОЗУ

так то он так, только вот под ДОС компиляторами ,насколько я помню, у ф-ий ограничение по работе с строками в 255 символов.

Автор: ShavarRsh 1.3.2008, 18:40
А, понятно. Ну тогда уж лучше std::string, чем char*

Автор: dembel 2.3.2008, 13:15
спасибо всем, все вроде получилось, есть еще один вопрос как в переменную int записать число в 12 знаков?

Автор: Fazil6 2.3.2008, 13:53
Цитата(dembel @  2.3.2008,  12:15 Найти цитируемый пост)
как в переменную int записать число в 12 знаков?


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

Автор: dembel 2.3.2008, 14:04
а какую тогда тип переменных нужно использовать? я встрчал __int64 то что то н понял как с ними работать

Автор: JackYF 2.3.2008, 14:19
dembel, на 32-битных системах тебе поможет long long

Автор: bsa 2.3.2008, 17:19
dembel, код в студию

Автор: seravr 9.1.2009, 17:45
спасибо автору тему, пеплохо посмеялся

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)