пишу прогу реально надо их выкинуть
я делаю так но получается тарабарщина -Ю
char buffer - тут храниться строка
char *buf;
len=strlen(buffer);
buf =(char *)malloc(len);
strncpy(buf,buffer,len-2); В очень большой надежде что не нужные символы отрежуться
И они отрезаются но если допостим оригинал выглядил так^M
то после обработки так
И они отрезаются но если допостим оригинал выглядил так?№вобщем за место отрезанных мною символами остается мусор
ПОМАГИТЕ
Это если ожидаем ОДИН символ 0x0D в концеconst char *buffer = "xstr..."; //строка
unsigned int len = strlen(buffer);
char *pBuf = (char*)buffer;
if(len && 0x0D==buffer[len-1]){
pBuf = (char*)memcpy(malloc(len),buffer,len);
pBuf[len-1] = 0;
}
//используем pBuf только для чтения!!!
...if(pBuf!=buffer)
free(pBuf);
>пишу прогу реально надо их выкинутьЕсли руками по всему файлу во vi очень просто получается:
:%s/^V^M//g
^V^M - это значит CTRL-V CTRL-M
CTRL-V переводит терминал в режим, который не будет считать следующий символ управляющим, а напечает его.
а если программно: чтобы правильно отрезать нужно правильно семь раз отмерить.
распечатай содержимое буферов, посмотри, что у тебя там, прицелься хорошенько.
>>пишу прогу реально надо их выкинуть
>
> Если руками по всему файлу во vi очень просто получается:
>
>:%s/^V^M//g
>
>^V^M - это значит CTRL-V CTRL-M
>
>CTRL-V переводит терминал в режим, который не будет считать следующий символ управляющим,
>а напечает его.
>
>а если программно: чтобы правильно отрезать нужно правильно семь раз отмерить.
>распечатай содержимое буферов, посмотри, что у тебя там, прицелься хорошенько.руками..
tr -d "\r" < file.dos > file.nix
Однозначно руками проще.
Если программно, то кроме 0x0D еще нужно 0x0A выкидывать
1. Если нужно сделать это именно средствами вашей программы, то просто меняем местами байты в словах, которые имеют значения 0x0D0A (или 0x0A0D - точно не помню, как именно).
2. Если можно пользоваться другими програмамми, то iconv. Можно даже подключить libiconv.so в свою прогу... Я бы, конечно, рекомендовал решать такую простую задачу своими силами. Нечего систему нагружать
>пишу прогу реально надо их выкинуть
>я делаю так но получается тарабарщина -Ю
>char buffer - тут храниться строка
>char *buf;
>len=strlen(buffer);
>buf =(char *)malloc(len);
>strncpy(buf,buffer,len-2); В очень большой надежде что не нужные символы отрежуться
>И они отрезаются но если допостим оригинал выглядил так^M
>то после обработки так
>И они отрезаются но если допостим оригинал выглядил так?№
>
>вобщем за место отрезанных мною символами остается мусор
>ПОМАГИТЕя делаю так:
col -bx < dosfile > newfile