

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 <\hyperlink{Eina_8h}{Eina.h}>}

\textcolor{keywordtype}{int}
main(\textcolor{keywordtype}{int} argc EINA\_UNUSED, \textcolor{keywordtype}{char} **argv 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."};

   \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 = \hyperlink{group__Eina__Stringshare__Group_ga7102630f25d779cd216e48f1369f65b1}{eina\_stringshare\_add\_length}(prologe, 31);
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str);
   printf(\textcolor{stringliteral}{"length: %d\(\backslash\)n"}, \hyperlink{group__Eina__Stringshare__Group_ga55b2653599f130044d88e7b854235c2a}{eina\_stringshare\_strlen}(str));

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

\end{DoxyCodeInclude}


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

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

\end{DoxyCodeInclude}


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

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

\end{DoxyCodeInclude}


But the simplest way of creating a shared string is through \hyperlink{group__Eina__Stringshare__Group_gac7a3f073cafb7af63b2c7cc2eabd1c1f}{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 = \hyperlink{group__Eina__Stringshare__Group_gac7a3f073cafb7af63b2c7cc2eabd1c1f}{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}
   \hyperlink{group__Eina__Stringshare__Group_ga4e18c53f96ce4eaa82c5e5dc94e575d5}{eina\_stringshare\_ref}(str2);
   \hyperlink{group__Eina__Stringshare__Group_ga4453d2aff2b325c7b45048f30df9b1f5}{eina\_stringshare\_del}(str2);
   printf(\textcolor{stringliteral}{"%s\(\backslash\)n"}, str2);

\end{DoxyCodeInclude}
 \begin{DoxyWarning}{Warning}
{\bfseries Don\textquotesingle{}t} use \hyperlink{group__Eina__Stringshare__Group_ga4453d2aff2b325c7b45048f30df9b1f5}{eina\+\_\+stringshare\+\_\+del()} followed by eina\+\_\+share\+\_\+common\+\_\+add(), under some circunstances 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 \hyperlink{group__Eina__Stringshare__Group_ga4453d2aff2b325c7b45048f30df9b1f5}{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);

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

\end{DoxyCodeInclude}


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