网络上,或者很多书上,
介绍的一些代码,里面的很多函数,
基本都是返回 int、bool、void 等类型的,
为什么很少有返回 LPSTR 或 char * 等字符串类型的呢?

解决方案 »

  1.   

    有吧
    字符串函数strcat ,StrCatBuff, strchr等等!
      

  2.   

    LPSTR是指针,这个涉及内存的问题,因为函数中的局部变量在函数退出时会销毁的.象下面这个LPSTR test()
    {
       std::string ret = "hello";
      return (LPSTR)ret.c_str();
    }就会出错, 因为函数退出时, ret 已经完蛋了.
      

  3.   

    c 的函数一般都要在参数中输入自己的缓冲区的象
    char *strcat(
       char *strDestination,
       const char *strSource 
    );
    它返回的指针就是strDestination, 两个是一样的.还有就是自己预先保留的地址象
    inet_ntoa将数字的ip转换为字符型的ip,但是在windows平台下这个函数如果这么用in_addr a,b;
    a.s_addr = 23456;
    b.s_addr = 3456;cout << inet_ntoa(a) << " " << inet_ntoa(b) << endl;会让你大跌眼镜的.
      

  4.   

    strcat,既然值已经赋给 strDestination 了,为什么还要再返回 char * 呢?
    很少有使用 char *test = strcat(dest, str); 吧?
    一般都是直接 strcat(dest, str); 然后就用dest了。
      

  5.   

    返回局部变量的指针要完蛋的就像小西瓜说的那样所以大部分都是返回int、bool
      

  6.   

    那可以这样说吧:
    如果要返回char *类型的,就使用像strcat那样的方法,是吧?
      

  7.   

    两段代码:
    --------------------------------
    #include <windows.h>
    #include <stdio.h>char *test(char *dest, char *str)
    {
    char *dest2;
    dest2 = strcat(dest, str);
    return dest2;
    }int main()
    {
    char dest[10] = "12345";
    char *dest1 = test(dest, "67890");
    printf("dest1: %s\ndest:  %s\n", dest1,dest);
    return 0;
    }
    ----------------------------------------------------------------
    #include <windows.h>
    #include <stdio.h>char *test(char *dest, char *str)
    {
    strcat(dest, str);
    return dest;
    }int main()
    {
    char dest[10] = "12345";
    char *dest1 = test(dest, "67890");
    printf("dest1: %s\ndest:  %s\n", dest1,dest);
    return 0;
    }
    --------------------------------运行结果都一样啊:
    ---------------------
    dest1: 1234567890
    dest:  1234567890
    ---------------------
      

  8.   

    返回值很少是char *  一般是因为很多函数都是直接找你要buffer 把结果放在你提供的char *里.所以它不再返回char *了.这个是个很随意的问题..没什么的 ...
    而且有时候涉及到效率问题..
    库函数要尽量的快速高效,能留给程序员实现的就留给程序员实现,所以库函数基本上都没安全检查..
    如果要返回char * 那么就需要在函数内部malloc() 这就使得每调用一次就会malloc一次,不好..
    所以一般都是程序员提供malloc好的空间,然后库函数操作这个空间..LZ:
    strcat,既然值已经赋给 strDestination 了,为什么还要再返回 char * 呢?
    很少有使用 char *test = strcat(dest, str); 吧?
    一般都是直接 strcat(dest, str); 然后就用dest了。因为 为了方便一些连写的式子...
    比如 strlen(strcmp(str1,str2));连写的式子是高效的...
      

  9.   

    这样总结一下,不知道对不对:
    ///////////////////////////////////
    C\C++中,如果要返回 char * 型字符串,不要返回局部变量指针,容易出错。 
    以如下标准C库函数参考: 
    ---------------------------------------------- 
    char *strcat( 
       char *strDestination, 
       const char *strSource 
    ); 
    wchar_t *wcscat( 
       wchar_t *strDestination, 
       const wchar_t *strSource 
    ); 
    unsigned char *_mbscat( 
       unsigned char *strDestination, 
       const unsigned char *strSource 
    ); 
    ---------------------------------------------- 
    Parameters
    strDestination
        Null-terminated destination string.
    strSource
        Null-terminated source string.
     
    Return Value
    Each of these functions returns the destination string (strDestination). No return value is reserved to indicate an error. 
    //////////////////////////////////
      

  10.   

    -------------------
    因为 为了方便一些连写的式子...
    比如 strlen(strcmp(str1,str2));连写的式子是高效的...
    -------------------
    emptyness朋友一言点破,茅塞顿开!非常感谢!!!