c++知识点 2006-10-14 12:59

这是自己开发一个简易的监控系统时的所用到的知识点。

第一个问题

在网络传输数据时可以传intfloatdoulechar,等包括结构体类型但是除类类型外。

在调试中要常用merry寄存器。

应用事例:在send函数中要用到const char FAR * 类型。它的原形

int send (

  SOCKET s,             

  const char FAR * buf, 

  int len,              

  int flags             

);

这个类型我们可以用一个结构体的事例来代替。

 

第二个问题

strlen函数时要注意。它遇到\0就结束。所以注意若求结构体,公用体等类型时用sizeof函数能得到具体大小,若所求字段不包含\0可以用strlen函数。这个\0表示数字0

 

第三个问题

怎样把一个cstring类型转换为string类型。解决方法:用一个用中间变量。首先定义一个char*变量。将cstring转换为char*型再将char*转换为string类型。如ctring cstr("sfsfsf");char *ch = (LPSTR)(LPCTSTR)cst;string str (ch);

 

第四个问题

char 数组付个string类时。再将新的一个string类付这个string类却无法付值。原因是。是数组过大,没有结束位使的string类无法得到新的string类的值。解决办法是去掉数组中不存在的空间。

例如:string filename = "\\config.xml";

       string fileNamePath = "";

//获取文件路径

       int k=0,i1=0;

       HMODULE hModle = GetModuleHandle("ServerControlInfo.exe");

       char modelPath[256],filePath[256];

       int modelLength = GetModuleFileName(hModle,modelPath,256);

 

       if (!hModle)

       {

              AfxMessageBox("没有服务器需要运行的文件,请确认!");

              return;

       }

       if (modelLength)

       {

              for (int i = modelLength ; i >= 0 ; i-- )

              {

                     if (modelPath[i] == '\\')

                     {

                            k = i;

                            break;

                     }

              }

       }

      

       for (int i = 0 ; i < k ; i++)

       {

              if (modelPath[i] == '\\')

              {

                     filePath[i1] = '\\';

                     i1++;

                     filePath[i1] = modelPath[i];

              }

              else

              {

                     filePath[i1] = modelPath[i];

                     i1++;

              }

       }

 

       filePath[i1] = 0; //////注意这个地方。这就是问题的关键所在不付结束位。那么后边的filename永远也付不了。

       fileNamePath = filePath;//这个地方把数组转为了string

 

       fileNamePath += filename;

posted @ 2019-06-07 16:52  沙漠驼铃  阅读(130)  评论(0编辑  收藏  举报