Работа со строками C

Модератор: Модераторы разделов

Аватара пользователя
inline
Сообщения: 72
ОС: Gentoo

Работа со строками C

Сообщение inline »

Есть ли стандартные функции для удаления и вставки элементов в строки C (char*)?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Работа со строками C

Сообщение Liksys »

Уточни. группы символов или вставка одной строки посреди другой?
Спасибо сказали:
Аватара пользователя
inline
Сообщения: 72
ОС: Gentoo

Re: Работа со строками C

Сообщение inline »

Вставка одной строки посреди другой (вроде std::string::insert() в c++).
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Работа со строками C

Сообщение Liksys »

malloc()+sprintf+srncpy()
Я обычно через эту связку делаю. Там достаточно простая функция получается.
Спасибо сказали:
Аватара пользователя
inline
Сообщения: 72
ОС: Gentoo

Re: Работа со строками C

Сообщение inline »

malloc()+sprintf+srncpy()
Я обычно через эту связку делаю. Там достаточно простая функция получается.

А зачем sprintf?

Написал несколько функций, можно в них что-то подправить?

Код: Выделить всё

#include <string.h>

void strins(char *dest, int pos, char *src)
{
    memcpy(dest + pos + strlen(src), dest + pos, strlen(dest + pos));
    memcpy(dest + pos, src, strlen(src));
}

void strdel(char *dest, int pos, int len)
{
    strcpy(dest + pos, dest + pos + len);
}

void strnins(char *dest, int pos, char *src, int dest_n, int src_n)
{
    memcpy(dest + pos + src_n, dest + pos, dest_n - pos);
    memcpy(dest + pos, src, src_n);
}

void strndel(char *dest, int pos, int len, int n)
{
    strncpy(dest + pos, dest + pos + len, n - pos - len + 1);
}
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Работа со строками C

Сообщение Liksys »

Нужно везде вставить проверку на переполнение буффера, типа если строка 2 не влезает в строку 1 по длине, то ошибка. Если не сделаешь, то у тебя будет куча переполнений буфера.
Спасибо сказали:
Аватара пользователя
inline
Сообщения: 72
ОС: Gentoo

Re: Работа со строками C

Сообщение inline »

Спасибо за ответы!

Вот что у меня получилось:

Код: Выделить всё

#ifndef STRUTILS_H
#define STRUTILS_H

void strins(char *dest, int pos, char *src);
void strdel(char *dest, int pos, int len);
int strnins(char *dest, int pos, char *src, int src_n, int dest_n);
void strndel(char *dest, int pos, int len, int n);

#endif /* STRUTILS_H */


Код: Выделить всё

#include "strutils.h"
#include <string.h>

void strins(char *dest, int pos, char *src)
{
    memcpy(dest + pos + strlen(src), dest + pos, strlen(dest + pos));
    memcpy(dest + pos, src, strlen(src));
}

void strdel(char *dest, int pos, int len)
{
    strcpy(dest + pos, dest + pos + len);
}

int strnins(char *dest, int pos, char *src, int dest_n, int src_n)
{
    if (strnlen(dest, dest_n) + strnlen(src, src_n) > dest_n)
        return strnlen(dest, dest_n) + strnlen(src, src_n) - dest_n;
    memcpy(dest + pos + strnlen(src, src_n), dest + pos, strnlen(dest + pos, dest_n - pos));
    memcpy(dest + pos, src, src_n);
    return 0;
}
void strndel(char *dest, int pos, int len, int n)
{
    strncpy(dest + pos, dest + pos + len, strnlen(dest, n) - pos - len + 1);
}
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: Работа со строками C

Сообщение halturin »

strncat никто не пробовал? какие-то чудовищные извращения имхо ;) . того набора что идет в man string достаточно для любых манипуляций.
Спасибо сказали: