LINUX.ORG.RU

работа со строкой.


0

0

Привет. Сразу извиняюсь за тупой вопрос.

Есть строка типа "aaa/eee/rr/ttt/cc/uuu.qqq", мне нужно от нее отрезать "uuu.qqq". Только вот со строками работать не умею.

делаю так:

char szPath = "aaa/eee/rr/ttt/cc/uuu.qqq";

int ch = '/';

char *tmo = strrchr(szPath, ch);

Теперь у меня в tmo находится "/uuu.qqq", а как этот кусок отрезать от строки незнаю.

Зарание спасибо.

anonymous

Не знаю как в C, но обычно для этих целей бывает функция basename

AngryElf ★★★★★
()

А, наверное не так понял. если в szPath нужно получить "aaa/eee/rr/ttt/cc" то *tmo='\0'. Если в tmo -- "uuu.qqq", то tmo++.

anonymous
()

Что бы szPath стало равным "aaa/eee/rr/ttt/cc"
надо сделать следующее:

char szPath[] = "aaa/eee/rr/ttt/cc/uuu.qqq";
int ch = '/';
char *tmo = strrchr(szPath, ch);
*tmo = '\x0';

lonki-lomki
()
Ответ на: комментарий от anonymous

bash-3.1# cat > 111.c << EOF
> #include <string.h>
> #include <stdio.h>
> 
> int main(){
> char szPath[] = "aaa/eee/rr/ttt/cc/uuu.qqq";
> int ch = '/';
> char *tmo = strrchr(szPath, ch);
> *tmo = '\x0';
> printf("%s\n", szPath);
> }
> EOF
bash-3.1# gcc 111.c
bash-3.1# ./a.out
aaa/eee/rr/ttt/cc

lonki-lomki
()

#include <string.h>
....


....

char szPath[] = "aaa/eee/rr/ttt/cc/uuu.qqq";
int i;

for (i = strlen(szPath); i >= 0; i --)
        if (szPath[i] != '/')
                 szPath[i] = '\0';
        else
                 break;
        

Не могу не выразить свое негативное отношение к
именам типа SzPath

ttnl ★★★★★
()
Ответ на: комментарий от lonki-lomki

Прошу прощения, все работает, это я накосячил. слешь не в ту сторону поставил и не находил ничего.

Спасибо Всем за помощь!

anonymous
()
Ответ на: комментарий от generatorglukoff

> http://www.linux.org.ru/jump-message.jsp?msgid=1896096

Там анонимус приводил ссылку на русский вариант. Оригинал тут: http://www.joelonsoftware.com/articles/Wrong.html

Особенно глава I'm Hungary объясняет, чем венгерская нотация от Microsoft не та венгерская нотация, которую изобрел венгр из Microsoft ;)

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

Не надо писать функцию на несколько экранов, чтобы не забывать тип переменных. Венгерская нотация портит и усложняет код. Намекните Линусу писать ядро в венгерской нотации.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

> Не надо писать функцию на несколько экранов, чтобы не забывать тип переменных.

Для неграмотных краткий пересказ сути. Изначально, венгерская нотация использовалась для указания kind переменной, а не type. kind -- это некоторая семантическая информация, не указываемая типом. Две переменных с одинаковым типом могут иметь разный kind. То, во что это выродилось в подаче Microsoft -- нонсенс.

watashiwa_daredeska ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.