Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
cyberguz
6 / 6 / 1
Регистрация: 01.12.2010
Сообщений: 105
1

Как узнать размер строки как размер массива

25.01.2011, 12:39. Просмотров 5293. Ответов 8
Метки нет (Все метки)

C
1
2
3
4
5
6
const char* test_str = "01234\x00 789";
//очевидно, что
strlen(test_str) == 5;
sizeof(test_str) == 4;
sizeof(*test_str) == 1;
//как узнать размер строки до компиляции, например препроцессором?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 12:39
Ответы с готовыми решениями:

Узнать размер строки в файле
Необходимо узнать размер строки в файле, чтобы выделить для нее память и...

Узнать размер массива по указателю
Есть код: #include <stdio.h> #include <math.h> #include <string.h> void...

Узнать какой максимальный размер массива может быть выделен
Помогите написать код. Написать программу, которая запрашивает у...

Размер массива задается как параметр
Задана матрица символов размера N*N (N задается как параметр). Что значит "N...

Как задать размер массива с клавиатуры?
Как задать размер массива с клавиатуры? Гуглил, ничего толкового не нашел :|...

8
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
25.01.2011, 13:21 2
Никак.
0
easybudda
Модератор
Эксперт CЭксперт С++
10151 / 6057 / 1523
Регистрация: 25.07.2009
Сообщений: 11,480
25.01.2011, 13:28 3
Цитата Сообщение от cyberguz Посмотреть сообщение
//как узнать размер строки до компиляции, например препроцессором?
Если строка - константа и обязательно где-то посередине должна ноль содержать, то прийдётся и размер её где-то рядом хранить
C
1
2
#define TEST_STR "bla bla\0bla"
#define TEST_LEN 11
Вот только зачем это? Строковые функции ( strlen(), strcmp(), strcpy(), etc... ) всё равно будут только с той частью строки, которая до нуля, работать...
1
cyberguz
6 / 6 / 1
Регистрация: 01.12.2010
Сообщений: 105
25.01.2011, 13:41  [ТС] 4
вот облом !

ну блин, компилятор же как-то определяет сколько места выделять на строку, может всё-таки можно вытащить?

другой вариант, интересно прокатит?

C
1
char test_arr[] = "01234\x00 789";
Добавлено через 2 минуты
А надо это мне чтобы удобней тесты писать было

Добавлено через 1 минуту
не люблю делать Ctrl+C Ctrl+V
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
25.01.2011, 14:52 5
Цитата Сообщение от cyberguz Посмотреть сообщение
ну блин, компилятор же как-то определяет сколько места выделять на строку, может всё-таки можно вытащить?

не люблю делать Ctrl+C Ctrl+V
Поясни.
0
cyberguz
6 / 6 / 1
Регистрация: 01.12.2010
Сообщений: 105
25.01.2011, 15:38  [ТС] 6
Вопрос решился с помощью инициализации динамического массива строкой.

Поясняю: чтобы тестить всякие свои функции я пишу относительно универсальную тест-функцию и прогоняю её по массиву структур содержащих описание тестов, типа входные данные и ожидаемые выходные данные. Чтобы не писать одно и то-же по сто раз я пользуюсь макросами. Например при проверке работы всякой сериализации/парсинга в структуру загоняются массивы, которые оченб неудобно набирать в коде в виде
C
1
{0, 3, 5}
гораздо удобнее в виде строк. А в этих строках естессно будут встречаться нули, вот и была проблема - не знал как узнать длину такой строки (не считать же вручную символы в 100 строках длиной от 0 до 100 символов).
Только вот вылез ещё один баг - в строке:
C
1
"0\x015"
- два байта, не считая завершающего ноля, а если хочешь чтобы было три надо писать
C
1
"0\x01\x35"
.
0
easybudda
25.01.2011, 15:43
  #7

Не по теме:

ересь какая-то...

0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
25.01.2011, 21:14 8
cyberguz, у Вас какое-то извращенное понятие удобства. Пишите код так, чтобы было удобно другим, а не лично Вам.
1
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
26.01.2011, 05:03 9
Цитата Сообщение от cyberguz
Например при проверке работы всякой сериализации/парсинга в структуру загоняются массивы, которые оченб неудобно набирать в коде в виде
а что если набрать это в текстовом файле ?
0
26.01.2011, 05:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2011, 05:03

Как правильно расширять размер строки по ходу работы программы?
Как сделать динамическую строку ( string в С++ )? Пробовал вот так: ...

Как уменьшить размер динамического массива через realloc?
Есть такой вариант, но он почему-то не работает. void remLastElement(int...

Задан размер прямоугольного массива и целочисленные элементов его первой строки
Задан размер прямоугольного массива и целочисленные элементов его первой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru