LinuxForum.Fans
Тема

String и скобки

Автор: viva_linuxoid 11 сообщений 2230 просмотров
#341103

доброго времени и суток !!!
Я хотел спросить что дают скобки после имени метода и как создать переменную string в си (чистом си).
заранее спасибо.
(давно мучают эти вопросы)

#341111
"viva_linuxoid" написал:
Я хотел спросить что дают скобки после имени метода

1. Это функция называется. Методы в C++.
2. ничего не дают. Это просто синтаксис. В паскале вот пишут begin, end. В bash'е пишут вот так:

text
case a in b
...
esac

if command; then ... fi

ну а в C блок (несколько операторов) отделяют скобками.

например

text
if(УСЛОВИЕ)
{
  ОПЕРАТОР1;
  ОПЕРАТОР2;
}

оба оператора выполняются тогда, и только тогда, когда УСЛОВИЕ истинно (т.е. не равно нулю в C).

"viva_linuxoid" написал:
как создать переменную string в си

никак.

Можно только сделать массив из символов.

text
const char str[] = "test string";

такой массив имеет тип char*, оканчивается символом \0, и его нельзя менять.

Можно сделать массивы и так, что-бы их содержимое можно было менять (но не размер)

text
char str2[256];

PS: сейчас набегут тролли, и скажут, что размер менять можно. Я знаю. В новом стандарте иногда можно. Но не нужно.

PPS: да, ещё можно выделить память функцией malloc(3) и потом удалить free(3).

PPPS: сейчас набигут... Короче, если кто набижать хочет -- лучше расскажите сами.

#341116

Хм...
А с библиотеками можно как-то создать строковую переменную в си ?

#341118

"viva_linuxoid" написал:
А с библиотеками можно как-то создать строковую переменную в си ?
нет.
#341124

можно сделать свою структуру (struct) string, и написать кучу функций для обработки этой структуры.

ещё можно считать строкой указатель на символ. С двумя допущениями:

1. это не просто указатель на символ, а указатель на массив, который имеет достаточный для строки размер.

2. строка оканчивается на \0, и в ней нет символов \0. И размер массива достаточен не только для строки, но и для \0 в конце.

тогда с такими "строками" можно юзать библиотеку glibc, и все функции, перечисленные в третьем разделе man pages. Например

Показать
STRCPY(3) Linux Programmer's Manual STRCPY(3)

NAME
strcpy, strncpy - copy a string

SYNOPSIS
#include <string.h>

char *strcpy(char *dest, const char *src);

char *strncpy(char *dest, const char *src, size_t n);

DESCRIPTION
The strcpy() function copies the string pointed to by src, including the terminat-
ing null byte ('\0'), to the buffer pointed to by dest. The strings may not over-
lap, and the destination string dest must be large enough to receive the copy.
Beware of buffer overruns! (See BUGS.)

The strncpy() function is similar, except that at most n bytes of src are copied.
Warning: If there is no null byte among the first n bytes of src, the string placed
in dest will not be null-terminated.

If the length of src is less than n, strncpy() writes additional null bytes to dest
to ensure that a total of n bytes are written.
#341125
"viva_linuxoid" написал:
А на c++

а на C++ есть стандартная STL, в которой есть нужный вам std::string. Но можно сделать и свой, с картами и девочками.

#341143

viva_linuxoid, думаю -- не нужно. Тема C++ очень сложна, и у меня нет времени её раскрывать. Да и здешние вахтёры наверное скоро меня опять забанят...

#341270

не. не забанили пока. Продолжаем веселье.

И да, C++ всё равно не рекомендую. Что вам в сишечке не нравится? Char* вполне годная замена стрингов. Сам Линус юзает, и нахваливает. И шлёт всех к такой-то матери, кто пожелает C++, или прочую ересь.

Войдите или зарегистрируйтесь, чтобы ответить.