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

Как узнать размер строки как размер массива - C (СИ)

25.01.2011, 12:39. Просмотров 5204. Ответов 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;
//как узнать размер строки до компиляции, например препроцессором?

http://www.cyberforum.ru/c-beginners/thread1618136.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 12:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как узнать размер строки как размер массива (C (СИ)):

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

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

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

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

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

8
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
25.01.2011, 13:21 #2
Никак.
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
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
Эксперт С++
2309 / 1682 / 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
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
25.01.2011, 21:14 #8
cyberguz, у Вас какое-то извращенное понятие удобства. Пишите код так, чтобы было удобно другим, а не лично Вам.
1
accept
4833 / 3254 / 454
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

Как ввести размер матрицы с клавиатуры?
Есть двухмерная матрица нужно задать размер с помощью клавиатуры

Как отвести неопределенный размер в памяти
Я объвляю переменную, указатель на пустую строку: char *str = {""}; В теле...


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

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

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