代码之家  ›  专栏  ›  技术社区  ›  ilija veselica

检查字符串是否为空

  •  6
  • ilija veselica  · 技术社区  · 14 年前

    我有一个C++项目,我需要编辑。这是变量的声明:

    LPSTR hwndTitleValue = (LPSTR)GlobalAlloc(GPTR,(sizeof(CHAR) * hwndTitleSize));
    

    我只是试着 if(hwndTitleValue == "") 但它总是返回false。如何检查此字符串是否为空?

    编辑

    我还需要检查文件是否附有附件。以下是文件的代码:

        // Attachment
        OFSTRUCT ofstruct;
        HFILE hFile = OpenFile( mmsHandle->hTemporalFileName , &ofstruct , OF_READ );
        DWORD hFileSize = GetFileSize( (HANDLE) hFile , NULL );
        LPSTR hFileBuffer = (LPSTR)GlobalAlloc(GPTR, sizeof(CHAR) * hFileSize );
        DWORD hFileSizeReaded = 0;
        ReadFile( (HANDLE) hFile , hFileBuffer, hFileSize, &hFileSizeReaded, NULL );
        CloseHandle( (HANDLE) hFile );
    

    如何检查 hFile

    7 回复  |  直到 10 年前
        1
  •  11
  •   Bruno Brant    14 年前

    我相信HwnTitleValue是一个指针,至少在匈牙利符号中是这样。您的方法是分配字节数组(ANSI C字符串),因此最好的方法是

    #include <string.h>
    // ... other includes ...
    
    int isEmpty(LPSTR string)
    {
        if (string != NULL)
        {
            // Use not on the result below because it returns 0 when the strings are equal,
            // and we want TRUE (1).
            return !strcmp(string, "");
        }
    
        return FALSE;
    }
    

    #include <string.h>
    // ... other includes ...
    
    int isEmpty(LPSTR string)
    {
        // Using the tip from Maciej Hehl
        return (string != NULL && string[0] == 0);
    }
    

    需要注意的一点是,字符串可能不是空的,而是用空格填充的。此方法将告诉您字符串包含数据(空格是数据!)。如果需要考虑填充空格的字符串,则需要先对其进行修剪。


    编辑 isEmpty

    #include <string.h>
    // ... other includes ...
    
    int isEmpty(LPSTR string)
    {
        // Always return FALSE to NULL pointers.
        if (string == NULL) return FALSE;
    
        // Use not on the result below because it returns 0 when the strings are equal,
        // and we want TRUE (1).
        return !strcmp(string, "");
    
    }
    
        2
  •  18
  •   Graeme Perrow    14 年前

    检查字符串是否为空的最简单方法是查看第一个字符是否为空字节:

    if( hwndTitleValue != NULL && hwndTitleValue[0] == '\0' ) {
        // empty
    }
    

    你可以用 strlen strcmp 与其他答案一样,但这会保存一个函数调用。

        3
  •  3
  •   Nikolai Fetissov    14 年前

    首先,这不是字符串。还没有。它只是一个指向内存块的指针,内存块的所有意图和用途都包含垃圾,即一些随机数据。

    C中的字符串是指向 字符数组。所以你的空弦 "" 指针

        4
  •  2
  •   sharptooth    14 年前

    GlobalAlloc() 将返回一个充满零的内存块(感谢 GPTR 旗子),不是字符串。检查是没有意义的。你最好检查一下返回的指针是否为空。

    if (*hwndTitleValve == 0 ) {
    }
    

    有效的空字符串将在开头存储空终止符。

        5
  •  2
  •   uesp    14 年前

    GlobalAlloc函数只分配并返回一块内存,GPTR选项将分配内存的字节归零,这样您就可以使用:

    if (strlen(hwndTitleValve) == 0)
    

    假设是ANSI字符串。请注意,这将被更好地标记为“C”和“Windows”而不是C++。

        6
  •  0
  •   Nemanja Trifunovic    14 年前

    我觉得字符串名称以hwnd开头很奇怪(这是用于windows句柄的),但无论如何,您可以假设LPSTR与char*是同一个东西,只需使用strlen之类的东西来检查它的长度。

        7
  •  -1
  •   Kra    14 年前

    如果要检查内存分配是否失败,请执行以下操作:

    if(hwnTitleValue==NULL) 返回分配失败;