

Like all examples we start by including Eina\+: 
\begin{DoxyCodeInclude}
\textcolor{preprocessor}{#include <stdio.h>}

\end{DoxyCodeInclude}


Here we declare some variables and initialize eina\+: 
\begin{DoxyCodeInclude}
\textcolor{preprocessor}{#include <\mbox{\hyperlink{Eina_8h}{Eina.h}}>}

\textcolor{keywordtype}{int}
main(\textcolor{keywordtype}{int} argc \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{char} **argv \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})
\{
   \textcolor{keyword}{const} \textcolor{keywordtype}{char} *str, *str2;
   \textcolor{keyword}{const} \textcolor{keywordtype}{char} *prologe = \textcolor{stringliteral}{"The Cylons were created by man. They rebelled. They "}
                         \textcolor{stringliteral}{"evolved."};
   \textcolor{keyword}{const} \textcolor{keywordtype}{char} *prologe2 = \textcolor{stringliteral}{"%d Cylon models. %d are known. %d live in secret. "}
                          \textcolor{stringliteral}{"%d will be revealed."};
   \textcolor{keyword}{const} \textcolor{keywordtype}{char} *prologe3 = \textcolor{stringliteral}{"There are many copies. And they have a plan."};

   \mbox{\hyperlink{group__Eina__Main__Group_gabf448ada5bc81a07342b66c6f818ee5e}{eina\_init}}();

\end{DoxyCodeInclude}


We start the substantive part of the example by showing how to make a part of a string shared and how to get the length of a shared string\+: 
\begin{DoxyCodeInclude}

   str = \mbox{\hyperlink{group__Eina__Stringshare__Group_gabe8ecf4121011cb792f36ecd8c44e470}{eina\_stringshare\_add\_length}}(prologe, 31);
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str);
   printf(\textcolor{stringliteral}{"length: %d\(\backslash\)n"}, \mbox{\hyperlink{group__Eina__Stringshare__Group_gaf316a9f4a787091ee437ec7caf0a5c7b}{eina\_stringshare\_strlen}}(str));

\end{DoxyCodeInclude}
 As we add shared strings we also need to delete them when done using them\+: 
\begin{DoxyCodeInclude}
   \mbox{\hyperlink{group__Eina__Stringshare__Group_ga495411b0bc85b9c0d59ec7255a025260}{eina\_stringshare\_del}}(str);

\end{DoxyCodeInclude}


There are many ways of creating shared strings including an equivalent to sprintf\+: 
\begin{DoxyCodeInclude}

   str = \mbox{\hyperlink{group__Eina__Stringshare__Group_gab3507a1373455cac57bf494e776fe4a8}{eina\_stringshare\_printf}}(prologe2, 12, 7, 4, 1);
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str);
   \mbox{\hyperlink{group__Eina__Stringshare__Group_ga495411b0bc85b9c0d59ec7255a025260}{eina\_stringshare\_del}}(str);

\end{DoxyCodeInclude}


An equivalent to snprintf\+: 
\begin{DoxyCodeInclude}

   str = \mbox{\hyperlink{group__Eina__Stringshare__Group_ga4bc3769aa8d4d33c36b6857af33a810b}{eina\_stringshare\_nprintf}}(45, \textcolor{stringliteral}{"%s"}, prologe3);

\end{DoxyCodeInclude}


But the simplest way of creating a shared string is through \mbox{\hyperlink{group__Eina__Stringshare__Group_ga5293082680141132ffcacc28866ef0ef}{eina\+\_\+stringshare\+\_\+add()}}\+: 
\begin{DoxyCodeInclude}
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str);

\end{DoxyCodeInclude}


Sometimes you already have a pointer to a shared string and want to use it, so to make sure the provider of the pointer won\textquotesingle{}t free it while you\textquotesingle{}re using it you can increase the shared string\textquotesingle{}s ref count\+: 
\begin{DoxyCodeInclude}
   str2 = \mbox{\hyperlink{group__Eina__Stringshare__Group_ga5293082680141132ffcacc28866ef0ef}{eina\_stringshare\_add}}(prologe3);
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str2);

\end{DoxyCodeInclude}


Whenever you have a pointer to a shared string and would like to change it\textquotesingle{}s value you should use eina\+\_\+stringshare\+\_\+replace()\+: 
\begin{DoxyCodeInclude}
   \mbox{\hyperlink{group__Eina__Stringshare__Group_gac6f45e4273f13f42e9a3c48435cd03dc}{eina\_stringshare\_ref}}(str2);
   \mbox{\hyperlink{group__Eina__Stringshare__Group_ga495411b0bc85b9c0d59ec7255a025260}{eina\_stringshare\_del}}(str2);
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str2);

\end{DoxyCodeInclude}
 \begin{DoxyWarning}{Warning}
{\bfseries Don\textquotesingle{}t} use \mbox{\hyperlink{group__Eina__Stringshare__Group_ga495411b0bc85b9c0d59ec7255a025260}{eina\+\_\+stringshare\+\_\+del()}} followed by eina\+\_\+share\+\_\+common\+\_\+add(), under some circumstances you might end up deleting a shared string some other piece of code is using.
\end{DoxyWarning}
We created str but haven\textquotesingle{}t deleted it yet, and while we called \mbox{\hyperlink{group__Eina__Stringshare__Group_ga495411b0bc85b9c0d59ec7255a025260}{eina\+\_\+stringshare\+\_\+del()}} on str2, we created it and then increased the ref count so it\textquotesingle{}s still alive\+: 
\begin{DoxyCodeInclude}

   eina\_stringshare\_replace(&str, prologe);
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str);

   \mbox{\hyperlink{group__Eina__Stringshare__Group_ga495411b0bc85b9c0d59ec7255a025260}{eina\_stringshare\_del}}(str);
   \mbox{\hyperlink{group__Eina__Stringshare__Group_ga495411b0bc85b9c0d59ec7255a025260}{eina\_stringshare\_del}}(str2);

\end{DoxyCodeInclude}


You can see the full source code \mbox{\hyperlink{eina_stringshare_example_01}{here}}. 