

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't free it while you're using it you can increase the shared string'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'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'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'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'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}. 