471,898 Members | 1,746 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,898 software developers and data experts.

problem with storing greek chars to a buffer (os linux)

hello everyone and happy new year.
i am not sure how to tackle this problem or where is originates from so
i am writing here in hope that if you can not help you can at least
point me in a direction.

I am writing some little program using only standard c++ library and i
am opening a file that contains strings. there are numbers , english
and greek letters among the characters. the reading is done fine and
the data are then stored onto a buffer (without undergoing any
processing) as a few int values ( the lengths of the strings), followed
by a long c string - the concatenation of all the strings of the file.
the receive application can then use the lengths of the strings to
separate the strings from the string again.

so examining the buffer contents in the shared memory i found that the
numbers have their correct corresponding values (0x30 for char '0'
etcetc.) and the lengths of the strings in the c string are correct
too. but the greek characters and system chars found among them (like
spacebar) where wrong - did not have their expected (extended) ascii
values. the funny thing is if i printf the strings of the file, they
appear correctly on console!!

i have set LC_ALL environment variable in my linux machine to
en_US.UTF-8, just in case this is an important detail. and the file was
written from vim (not internally from the program). is it possible that
the file is written in utf-16 format? utf-8? could it be something
wrong in the code?(see below)
thank you in advance for your help
once i have the independent strings with 'loadInfoConf()' i serialise
them and send them to the shMem using:

detailsStr; details.writeStructToStream(GUILastMessage.oNL,GUI LastMessage.oTL,GUILastMessage.sNL,GUILastMessage. sLL,GUILastMessage.iDL,GUILastMessage.mDL,detailsS tr);
strcpy(&GUILastMessage.oAndS_str,detailsStr.c_str( ));
void InfoClass::loadInfoConf()
string curLine="",sumLine="", lines[6];
int i=0;

ifstream infoConfFile(INFOCONF_FILENAME);
if (infoConfFile.is_open())
while (!infoConfFile.eof())
if ((curLine!="EOV"))
if (curLine!="")

//remove the last char which is always \n due to the way
//the file open parser (just above) works
lines[0].erase( (lines[0].length()-1) ,1);
lines[1].erase( (lines[1].length()-1) ,1);
lines[2].erase( (lines[2].length()-1) ,1);
lines[3].erase( (lines[3].length()-1) ,1);
lines[4].erase( (lines[4].length()-1) ,1);
lines[5].erase( (lines[5].length()-1) ,1);

info.operatorTel = lines[0];
info.operatorName = lines[1];
info.stationNum = lines[2];
info.stationLoc = lines[3];
info.instDate = lines[4];
info.maintDate = lines[5];

cout<<"could not open info file\n";
void InfoClass::writeStructToStream (int &on_len, int &ot_len, int
&sn_len, int &sl_len, int &id_len, int &md_len, string &buffer)

//int totLen=on_len+ot_len+sn_len+sl_len+id_len+md_len/*+1*/;
string tmpbuf="";
tmpbuf += info.operatorTel;
tmpbuf += info.operatorName;
tmpbuf += info.stationNum;
tmpbuf += info.stationLoc;
tmpbuf += info.instDate;
tmpbuf += info.maintDate;


Jan 3 '07 #1
0 1301

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Lupus | last post: by
reply views Thread by kiluone | last post: by
reply views Thread by YellowAndGreen | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.