Работа со строками C
Модератор: Модераторы разделов
-
inline
- Сообщения: 72
- ОС: Gentoo
Работа со строками C
Есть ли стандартные функции для удаления и вставки элементов в строки C (char*)?
-
Liksys
- Сообщения: 2910
Re: Работа со строками C
Уточни. группы символов или вставка одной строки посреди другой?
-
inline
- Сообщения: 72
- ОС: Gentoo
Re: Работа со строками C
Вставка одной строки посреди другой (вроде std::string::insert() в c++).
-
Liksys
- Сообщения: 2910
Re: Работа со строками C
malloc()+sprintf+srncpy()
Я обычно через эту связку делаю. Там достаточно простая функция получается.
Я обычно через эту связку делаю. Там достаточно простая функция получается.
-
inline
- Сообщения: 72
- ОС: Gentoo
Re: Работа со строками C
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
Нужно везде вставить проверку на переполнение буффера, типа если строка 2 не влезает в строку 1 по длине, то ошибка. Если не сделаешь, то у тебя будет куча переполнений буфера.
-
inline
- Сообщения: 72
- ОС: Gentoo
Re: Работа со строками C
Спасибо за ответы!
Вот что у меня получилось:
Вот что у меня получилось:
Код: Выделить всё
#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
strncat никто не пробовал? какие-то чудовищные извращения имхо
. того набора что идет в man string достаточно для любых манипуляций.