网络上,或者很多书上,
介绍的一些代码,里面的很多函数,
基本都是返回 int、bool、void 等类型的,
为什么很少有返回 LPSTR 或 char * 等字符串类型的呢?
介绍的一些代码,里面的很多函数,
基本都是返回 int、bool、void 等类型的,
为什么很少有返回 LPSTR 或 char * 等字符串类型的呢?
解决方案 »
- CStatic文本点击不响应
- Berkeley DB与Windows 服务相冲突?
- 各位1存储过程返回记录集recordcount-1,怎么解决啊?
- 音频高手救我!!!
- VC有什么函数可以计时,计时结束就终止它监测的那个事情?
- 刚看完异型1。比较爽,散分庆祝一下!!!顺便问大家一个问题,你们装了那个月的msdn,机器上共装了几套msdn。
- 在CRichEditCtrl中能否插入和编辑图表、公式?
- 如何更新vc的sdk,是用patch吗?
- 服务器不recv数据产生的错误
- 一个程序失去焦点后,如何能继续获得键盘消息?
- Send 阻塞问题
- 大家用的 MSDN 是什么版本的?哪里下载?你认为哪一个版本最好?
字符串函数strcat ,StrCatBuff, strchr等等!
{
std::string ret = "hello";
return (LPSTR)ret.c_str();
}就会出错, 因为函数退出时, ret 已经完蛋了.
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;会让你大跌眼镜的.
很少有使用 char *test = strcat(dest, str); 吧?
一般都是直接 strcat(dest, str); 然后就用dest了。
如果要返回char *类型的,就使用像strcat那样的方法,是吧?
--------------------------------
#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
---------------------
而且有时候涉及到效率问题..
库函数要尽量的快速高效,能留给程序员实现的就留给程序员实现,所以库函数基本上都没安全检查..
如果要返回char * 那么就需要在函数内部malloc() 这就使得每调用一次就会malloc一次,不好..
所以一般都是程序员提供malloc好的空间,然后库函数操作这个空间..LZ:
strcat,既然值已经赋给 strDestination 了,为什么还要再返回 char * 呢?
很少有使用 char *test = strcat(dest, str); 吧?
一般都是直接 strcat(dest, str); 然后就用dest了。因为 为了方便一些连写的式子...
比如 strlen(strcmp(str1,str2));连写的式子是高效的...
///////////////////////////////////
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.
//////////////////////////////////
因为 为了方便一些连写的式子...
比如 strlen(strcmp(str1,str2));连写的式子是高效的...
-------------------
emptyness朋友一言点破,茅塞顿开!非常感谢!!!