- Строковые типы в C, Pahanivo, 17:07 , 24-Июн-14 (1)
- Строковые типы в C, Evolve32, 19:42 , 24-Июн-14 (2)
- Строковые типы в C, pavlinux, 00:07 , 25-Июн-14 (6)
- Строковые типы в C, noisebringer, 16:51 , 30-Июн-14 (34) –2
- Строковые типы в C, pavlinux, 17:05 , 30-Июн-14 (35)
- Строковые типы в C, noisebringer, 17:11 , 30-Июн-14 (36)
- Строковые типы в C, pavlinux, 18:53 , 30-Июн-14 (37)
- Строковые типы в C, noisebringer, 20:27 , 30-Июн-14 (38)
- Строковые типы в C, Аноним, 20:43 , 30-Июн-14 (39)
- Строковые типы в C, noisebringer, 20:51 , 30-Июн-14 (40)
- Строковые типы в C, pavlinux, 02:35 , 01-Июл-14 (41)
- Строковые типы в C, noisebringer, 05:46 , 01-Июл-14 (42)
- Строковые типы в C, noisebringer, 09:38 , 01-Июл-14 (43)
- Строковые типы в C, pavlinux, 21:04 , 01-Июл-14 (44)
- Строковые типы в C, Andrey Mitrofanov, 10:02 , 02-Июл-14 (45)
- Строковые типы в C, noisebringer, 12:19 , 02-Июл-14 (46)
- Строковые типы в C, pavlinux, 14:45 , 02-Июл-14 (47)
- Строковые типы в C, noisebringer, 19:41 , 02-Июл-14 (48)
- Строковые типы в C, anonymous, 00:32 , 03-Июл-14 (50)
- Строковые типы в C, pavlinux, 02:00 , 03-Июл-14 (51)
- Строковые типы в C, Andrey Mitrofanov, 09:24 , 03-Июл-14 (53)
- Строковые типы в C, anonymous2, 20:18 , 03-Июл-14 (54)
- Строковые типы в C, pavlinux, 02:40 , 04-Июл-14 (55)
- Строковые типы в C, anonymous, 00:21 , 03-Июл-14 (49)
- Строковые типы в C, datswd, 18:49 , 04-Ноя-14 (56) –1
Результатом стало следующее.Для того чтобы в C по-человечески работать с строками была создана библиотека mstring, функции которой выполняя операции со строками выделяют соответствующее количество памяти в куче. ------mstring.h char* Msprintf(char* To, char* Fmt, ...); //форматированный вывод в строку To с заменой её содержимого char* MCsprintf(char* To, char* Fmt, ...); //форматированный вывод в конец строки To char* Mstrcat(char* CatTo, char* ToCat); //Вывод строки ToCat в переменную CatTo char* Mstrcpy(char* CpyTo, char* ToCpy); //Копирование строки ToCpy в строку CpyTo int IsPosDigit(char* ToCheck); //Является ли строка ToCheck положительным числом, то есть все символы 0-9 И со строкой работать нужно вот так вот. char* MyString = NULL //Определяем указатель int I = 5; MyString = Msprintf(MyString, "lalala blblb %i", I); //Делаем форматированный вывод в строку MyString printf("%s", MyString); //Выводим строку MyString if(MyString) free(MyString); //Если MyString не NULL освобождаем выделенную память Ну и собственно исходный код библиотеки.
------mstring.c
char* MCsprintf(char* To, char* Fmt, ...) { va_list Ptr; va_start(Ptr, Fmt); int L = vsnprintf(NULL, 0, Fmt, Ptr); va_end(Ptr); int M = To ? strlen(To) : 0; To = (char *)realloc(To, (L + M + 2) * CHAR_SIZE); va_start(Ptr, Fmt); vsprintf(To + M, Fmt, Ptr); va_end(Ptr); return To; } char* Msprintf(char* To, char* Fmt, ...) { va_list Ptr; va_start(Ptr, Fmt); int L = vsnprintf(NULL, 0, Fmt, Ptr); va_end(Ptr); if(To) free(To); To = (char *)calloc((L + 2), CHAR_SIZE); va_start(Ptr, Fmt); vsprintf(To, Fmt, Ptr); va_end(Ptr); return To; } int IsPosDigit(char *ToCheck) { if(ToCheck && strlen(ToCheck)) { int I = 0; for(I = 0; I < strlen(ToCheck); I++) if(!isdigit(ToCheck)) return 0; return 1; } else return 0; } char* Mstrcat(char* CatTo, char* ToCat) { int P = CatTo ? strlen(CatTo) : 0; CatTo = (char*)realloc(CatTo, (P + strlen(ToCat) + 2) * CHAR_SIZE); strcpy(CatTo + P, ToCat); return CatTo; } char* Mstrcpy(char* CpyTo, char* ToCpy) { if(ToCpy) { if(CpyTo) free(CpyTo); CpyTo = (char*)calloc(strlen(ToCpy) + 2, CHAR_SIZE); strcpy(CpyTo, ToCpy); } return CpyTo; }
- Строковые типы в C, pavlinux, 19:46 , 04-Ноя-14 (57)
- Строковые типы в C, noisebringer, 16:40 , 05-Ноя-14 (58)
- Строковые типы в C, pavlinux, 18:26 , 05-Ноя-14 (59)
- Строковые типы в C, datswd, 18:10 , 10-Ноя-14 (60)
>> А что вы думаете о самом подходе к работе со строками? > Хреново. Точнее банально. > Нет проверки размеров строк. > Нет проверки malloc и Сo. > Нет поддержки UTF8/16/32 > strcpy/strlen - легко Досятся > куча NULL-dereference > +2 - какой-то непонятный констант.Не без этого :) И у мастерорв бывают люпы. А какой подход используете вы? P.S. Шутка :) - Строковые типы в C, datswd, 18:11 , 10-Ноя-14 (61)
>> А что вы думаете о самом подходе к работе со строками? > Хреново. Точнее банально. > Нет проверки размеров строк. > Нет проверки malloc и Сo. > Нет поддержки UTF8/16/32 > strcpy/strlen - легко Досятся Что значи досятся? Переполняются? > куча NULL-dereference > +2 - какой-то непонятный констант.
- Строковые типы в C, NoiseBringer, 07:50 , 12-Янв-15 (62) –2
|