Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
1

Изменение длины строки

07.12.2017, 16:32. Показов 6094. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Нужно изменить длину строки:
C
1
2
char st[4];
st = (char *) realloc(st, n * sizeof(char));//n вводится заранее
При выполнении выкидывается фаталка - без объяснения. Как правильно изменить длину?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2017, 16:32
Ответы с готовыми решениями:

Изменение длины char* строки
Нужно в функции что-то навроде этого: char * foo(char *s1, char *s2) { /* в s1 записать...

Изменение длины строки. Добавление строки
Здравствуйте! В написании программы столкнулся с такой сложностью. Есть строка из 500 символов. Она...

Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки)
#include <iostream> #include <set> #include <iterator> #include <fstream> #include <string>...

Получить последовательность содержащую строки из A длины L1 и все строки из B длины L2 (используя LINQ)
Даны целые положительные числа L1 и L2 и строковые последовательности A и B. Строки...

6
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.12.2017, 16:45 2
Для такого массива - никак. Менять длину можно только у динамического массива.
0
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 379
07.12.2017, 16:45 3
Zwelenewskiy,
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
char st[4];
Это статический массив. Компилятор уже выделил память и это значение не может быть изменено.
0
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
07.12.2017, 17:07  [ТС] 4
Нужно написать "велосипед" - аналог встроенной функции для склеивания 2-х строк. В ф-ию передаются указатели на 2 строки, и нужно вернуть результат в первой строке. Для этого и нужно изменить размер строки...
0
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 379
07.12.2017, 17:16 5
Zwelenewskiy, не надо вам память выделять здесь, просто размер первого массива предусмотрите. Сделайте его с запасом.
0
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
07.12.2017, 17:53  [ТС] 6
Michail97, разве это не костыль?) Строка произвольной длины может быть
0
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 379
07.12.2017, 18:19 7
Zwelenewskiy, такая вот небезопасная функция strcat. Размер 1-ого массива должен быть предусмотрен. Или вам дорог каждый байт в строке?)
Единственный способ это вызвать функцию realloc, но это кажется мне слишком для конкатенации. В любом случае, если хотите так, то выделите через указатель память для первого слова malloc, calloc, realloc. Потом посчитайте кол-во символов в строчке, которую собрались клеить. Прибавьте это кол-во к к кол-ву байт для первой строчки. И перераспределите память через realloc для нового размера 1 строчки который вы высчитали и только потом может начинать конкатенацию Но как же это туго)))))

Добавлено через 5 минут
Zwelenewskiy, это конкатенация со статическим массивом.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
char *strcatsec( char [] , char [], size_t ); // безопасная функция конкатенации
/*
Аргументы:
- указатель на первый массив
- указатель на второй массив
- размер 1-ого массива
*/
int main( int argc, char *argv[] )
{
    char string_1[20]="Hello ", string_2[] = "world!";
    printf( "%-15s", strcatsec( string_1, string_2, sizeof( string_1)));
    putchar( '\n' );
    system( "pause");
    return 0;
}
char *strcatsec( char str_1[], char str_2[], size_t max_size )
{
    char *ptr = str_1, *sec_1 = str_1, *sec_2 = str_2;// основной указатель и 2 безопасных
    int  security = 0;
    /*проверка безопасности конкатенации*/
    while( *sec_1++ != '\0' );
    while( *sec_2 != '\0') sec_2++;
    security =  ( sec_1 - str_1 ) + ( sec_2 - str_2 );
    if( max_size < security ) return NULL; // если небезопасно
    /*непосредственная конкатенация*/
    while( *ptr != '\0') ptr++;
    do
    {
       *ptr++ = *str_2++;
        if( (*str_2) == '\0') break;
    }while( 1 );
    return str_1;// если безопасно
}
0
07.12.2017, 18:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2017, 18:19
Помогаю со студенческими работами здесь

Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке возрастания длины строки
Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке...

Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке возрастания длины строки
ребят всю голову сломал уже завтра уже надо сдавать(( Текстовый файл содержит строки –...

Строки. Поиск слова минимальной длины, вывод этой длины, номер слова и само слово
Как организовать решение такой задачи? Может как-то через создание массивов, в ячейках которых...

Изменение длины числа
Писал программу про 2 в степени 179 (только учусь): #include &lt;iostream&gt; #include &lt;cmath&gt; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru