社区
C++ 语言
帖子详情
高手请指教!字符指针
futurepro
2004-11-21 03:42:21
char *max(char * x,char *y)
{
return strcmp(x>y)>0?x:y;
}
main()
{
cout<<max("win","ms")<<endl;
return 1;
}
我做很多字符子指针相加或是相比较时总得不到要返回的结果!
...全文
99
5
打赏
收藏
高手请指教!字符指针
char *max(char * x,char *y) { return strcmp(x>y)>0?x:y; } main() { cout<<max("win","ms")<<endl; return 1; } 我做很多字符子指针相加或是相比较时总得不到要返回的结果!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dajiadihao
2004-11-21
打赏
举报
回复
楼上正解。。
参数调用错了。。
是strcmp(char *ch1,char *ch2);
0为相等
>0为ch1>ch2
<0为ch1<ch2
futurepro
2004-11-21
打赏
举报
回复
可以了,谢谢各位!
请问在哪里结贴啊!
我怎么找不到结贴
greenteanet
2004-11-21
打赏
举报
回复
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <string>
char *max(char * x,char *y)
{
return strcmp(x, y) > 0 ? x : y;
}
int main()
{
cout << max("win", "ms") << endl;
return 0;
}
输出结果为win
边城狂人
2004-11-21
打赏
举报
回复
你这个程序只有一点点错
return strcmp(x>y)>0?x:y;
改成
return strcmp(x, y) > 0 ? x : y;
不是指针的问题,是你调用 strcmp 给的参数给错了
kobefly
2004-11-21
打赏
举报
回复
返回指针的值
要用指针的指针
你这里返回的只是指针值的一个副本
所以不对
可以参见林锐书上的某一章
讲的比较详细
c语言高效编程,编写高效简洁的C 语言代码,
编写高效简洁的C 语言代码,是许多软件工程师追求的目标。本文就工 作中的一些体会和经验做相关的阐述,不对的地方
请
各位
指教
。 第一招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发 逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。 例如:
字符
串的赋值。 方法A:通常的办法: #define LEN 32 char string1 [LEN]; memset (string1,0,LEN); strcpy (string1,"This is a example!!"); 方法B: const char string2[LEN] ="This is a example!"; char * cp; cp = string2 ; 使用的时候可以直接用
指针
来操作。 从上面的例子可以看出,A 和B 的效率是不能比的。在同样的存储空间 下,B 直接使用
指针
就可以操作了,而A 需要调用两个
字符
函数才能完成。B 的 缺点在于灵活性没有A 好。在需要频繁更改一个
字符
leetcode-[removed]LeetCode题解,Javascript版本
LeetCode-Javascript题解 个人LeetCode解题记录备份,使用Javascript语言解答,尽可能参考,欢迎大神
指教
。 双
指针
双
指针
主要用于遍历时间表,两个
指针
指向不同的元素,从而协同完成任务 要求:串联有序 题号 标题 艰难 衔链 原始码 用时击败 0001 两数之和 ★☆☆ 95.44% 0015 三数之和 ★★☆ 60.20% 0088 合并两个有序时序 ★☆☆ 99.35% 0141 判断链表是否存在环 ★☆☆ -- -- -- 0524 最长子序列 ★★☆ -- -- -- 0633 平方数之和和 ★☆☆ 98.06% 0345 反转弦中的元音字母 ★☆☆ 99.73% 0680 验证回文
字符
串Ⅱ ★☆☆ 100.00% 贪心算法 局部最优解=>局部最优解 题号 标题 艰难 衔链 原始码 用时击败 0435 无重叠区间 ★★☆ 9
在win32下Hook系统API.txt
3.1 程序说明 当启动程序Try.EXE调用SetMouseHook()后,Windows系统将MouseHook.DLL映射入每一个有鼠标消息传入的进程地址空间。映射时将用DLL_PROCESS_ATTACH作为参数fdwReason的值调用DllEntryPoint(),DllEntryPoint()调用ModifyCall()搜索该进程对TextOutA()的调用并将其替换为调用MyTextOut()。这样当该进程调用GDI32.DLL的TextOutA()时实际调用的却是MouseHook.DLL的MyTextOut()。 ModifyCall()利用进程的HINSTANCE(也即HMODULE,对于Win32而言它们是一回事,即装载基址)找到DOS文件头结构IMAGE_DOS_HEADER,再利用IMAGE_DOS_HEADER中的e_lfanew成员找到Win32的IMAGE_NT_HEADERS结构,该结构含有动态连接所需的信息。IMAGE_NT_HEADERS中的OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]含有DLL函数引入表的RVA(相对虚拟地址)和大小。搜索该表所指向的DLL引入函数地址,值与GetProcAddress()返回值相同的单元就是对应的DLL函数地址存放单元,将MyTextOut()地址写入即可。详细情形
请
参阅有关PE文件格式的说明和Winnt.h中的定义。 当启动程序调用UnMouseHook()时,过程与之类似,只是此时是为了卸下WH_MOUSE全局钩子并恢复原来对TextOutA()的调用。 此处设置WH_MOUSE全局钩子的目的只是利用全局钩子的特性将MouseHook.DLL“挤进”其它进程的地址空间,因此钩子过程MouseProc()很简单,只是传递一下消息而已。 两个#pragma data_seg()编译器指令是为了定义一个名为.MouseHook的数据段(更确切地说是数据节),该数据段在MouseHook.DEF中被说明为共享,之所以如此是因为各个进程空间中的MouseProc()需要该钩子的句柄hMouseHook,而hMouseHook只在启动程序Try.EXE调用SetMouseHook()时得到一次,因此只能放在共享内存中,否则编程将变得复杂起来。至于每个进程中被替换下来的TextOutA()地址,是属于单个进程空间的,故放在局部数据中,Windows系统会为每次映射使用不同的内存。实际上,TextOutA()的引入地址在所有的进程中都是相同的,这是因为为了页面管理的简单和进程切换的效率,对每个进程Windows 9x将系统DLL映射在同一地址上,但这不是Windows对外保证的,而只是权宜之计,以后可能改变,且Windows NT的情况也可能不同。 MyTextOut()将截获的TextOutA()的参数lpText(即输出
字符
串)改变以后才输出,从而可以看到截获是否成功。之所以改变两个
字符
而不是简单的一个,是因为只改变一个
字符
将导致汉字输出乱码。 MyTextOut()源码中唯一的一条汇编语句__asm sub esp,14h是所有源码中最难写的语句。如果没有这条指令,MyTextOut()将无法正确返回到进程调用TextOutA()处的下一条指令上,出现的“意外”情况是:进程调用TextOutA()的最后一个参数、即输出
字符
串长度参数将作为返回地址从堆栈中弹出,从而使EIP为一个很小的值,程序进入Windows系统用作
指针
检查的低端内存,导致非法内存访问。在调试过程中发现导致这种现象的原因是MyTextOut()在临返回前使用了add esp,14h来清除并不需要清除的堆栈,从而破坏了堆栈。显然,原因在于函数调用说明使编译器产生了“错误”的堆栈管理代码,我不知道如何改正这一点,只好使用__asm sub esp,14h强行使堆栈
指针
指向“正确”的返回地址。有知晓个中奥妙的同志
请
与作者联系,多多
指教
。 以下程序在Windows 98、Microsoft Visual Studio 97中调试通过,由于编程中并未使用Windows 9x的特性,且程序依靠的PE文件格式在Windows 9x和Wiundows NT中是通用的,因此上述方法在Windows NT可能也是可行的,只是我并未验证(我没有装Windows NT的机器)。另外,某些方面的情况由于编译器和操作系统不同可能会有所不同(如编译器生成的指令),我的叙述会因此而偏颇甚至错误,在此先做个提醒,也欢迎来意见改进编程。
字符
指针
使用方法|新手易懂(含笔试题)
字符
指针
使用方法,通俗易懂
C语言:利用
指针
检查
字符
串是否是回文
编写程序,检查
字符
串是否是回文,主函数输入一个
字符
串,输出该
字符
串是否是回文的信息。编程新人,
请
多
指教
! 程序代码 # include <stdio.h> # include <string.h> # define N 20 void main() { char str[N]; char *p; char *q; start: //可以删除 printf("输入
字符
串: "); gets(str); p=str; q=str+strlen(str)-1;
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章