首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么strlen()似乎在VC++调试器中返回<void>?

在VC++调试器中,strlen()函数返回<void>可能是因为调试器的显示设置或者代码中的某些错误导致的。以下是一些可能的原因和解决方法:

  1. 代码中的错误:请检查代码中是否存在语法错误或者逻辑错误,这可能导致strlen()函数的返回值不正确。
  2. 调试器的显示设置:请检查调试器的显示设置,确保它正确地显示了strlen()函数的返回值。可能需要更改显示设置或者更新调试器。
  3. 编译器兼容性问题:请检查您的代码是否使用了与当前编译器不兼容的语法或特性。如果是这样,请更新代码以匹配当前的编译器版本。
  4. 库函数问题:请检查您的代码是否正确地链接了strlen()函数所在的库。如果没有,请确保您的代码正确地链接了相应的库。

总之,strlen()函数本身是一个常用的C/C++字符串函数,用于返回字符串的长度。如果在VC++调试器中返回<void>,则可能是由于代码中的错误、调试器的显示设置或其他因素导致的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Windows应用程序调试原理全景图

    为什么int 3可以让程序中断到调试器呢?没有调试运行的时候,遇到int 3又怎么出现程序崩溃呢?使用VS调试时F9下的断点是如何工作的?使用WinDbg的bp下的断点是如何工作的?...其实,无论使用VC++中的F9下断点也好,还是使用WinDbg中的bp下断点也好,也包括OllyDbg使用F2下断点,它们的工作原理都是一样的:使用了int 3。具体怎么做的呢?...一次调试会话中的两个重要角色:调试器与被调试进程是通过什么连接在一起呢?在Windows XP及以后的系统上,是一个通过调试对象的内核对象实现的。...同时为了调试器和被调试进程对这个链表的操作进行互斥,设置了一个Mutex。 消息链表中链接的节点是DEBUG_EVENT结构体,需要指出的是,调试器在Ring3调用kernel32!...DbgkForwardException()在发现其为空后将直接返回。不再继续进行异常消息的传递。将回到nt!

    1.3K20

    CC++程序员 面试经历总结

    一、嵌入式C语言面试回忆 主观题: 1、在嵌入式系统中,volitate的作用是什么?并给出三个不同的例子。...4、MFC中CSocket类能不能用在多个线程中,请说明原因。 5、IOCP在服务器中的应用,其特点和优势是什么,主要解决了什么问题。 6、存储过程是什么?在ADO和ODBC中存储过程如何使用?...http://www.cnblogs.com/mydomain/archive/2010/09/23/1833369.html 8、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern...四、VC++程序员面试  图像处理 1、QT和C++什么关系,你认为QT和MFC相比有什么异同点,各自的优势什么? 2、谈谈VC++中ADO连接数据库的几种方式? 3、QT采用的编译器是什么?...(我问了一个问题是:你们为什么使用VC++做图像处理,而不用QT呢?然后一个技术官反问了我这个问题。) 我直接回答说GCC、CLang、MinGW、VS2008的编译器什么的。没有分条理回答。

    2.3K31

    Android native进程间通信实例-socket本地通信篇之——服务端进程异常退出解决办法

    导读:   好难受啊,为什么服务端说挂就挂,明明只是客户端关闭而已,服务端怎么能挂呢? 想想,如果手机上使用一个聊天程序的时候,手机端关闭了聊天程序,那么远端服务器程序总不能说挂就挂吧!...,还是认怂好好看看线程做了什么: void *client_thread(void *arg) { int clifd = *(int *)arg;char *s = "hello mysocketclient...居然使用write的时候没有添加返回值的判断,在ubuntu终端中输入man 2 write,可以看到write出错时候会返回-1; 2.简单完善代码容错机制 添加容错代码后以后看看效果如何,代码如下:...先执行服务端程序,然后运行客户端程序,客户端程序强制退出(通过快捷键ctrl+c),服务端client_thread中write返回-1,线程正常退出。 2....添加捕获异常来再次加强容错机制 绞尽脑汁似乎没有什么效果,抓耳挠腮看看吧,好好翻翻书,看看能不能找到灵感。

    70920

    Android Native进程间通信实例—Socket本地通信服务端进程异常退出解决办法

    导读: 好难受啊,为什么服务端说挂就挂,明明只是客户端关闭而已,服务端怎么能挂呢? 想想,如果手机上使用一个聊天程序的时候,手机端关闭了聊天程序,那么远端服务器程序总不能说挂就挂吧!...,还是认怂好好看看线程做了什么: void *client_thread(void *arg) { int clifd = *(int *)arg;char *s = "hello mysocketclient...居然使用write的时候没有添加返回值的判断,在ubuntu终端中输入man 2 write,可以看到write出错时候会返回-1; 2.简单完善代码容错机制 添加容错代码后以后看看效果如何,代码如下:...先执行服务端程序,然后运行客户端程序,客户端程序强制退出(通过快捷键ctrl+c),服务端client_thread中write返回-1,线程正常退出。 2....添加捕获异常来再次加强容错机制 绞尽脑汁似乎没有什么效果,抓耳挠腮看看吧,好好翻翻书,看看能不能找到灵感。

    1K20

    认识初始化

    在以上String类的设计中,构造函数只需要根据传入的参数字符串的长度来分配空间就可以了,而赋值操作符重载函数则需要考虑传入的参数字符串的长度,然后决定是否要释放原来空间并申请新的空间。...所以,在很多编译器(如GCC)下,以上程序如法通过编译,但在VC++中,程序能够通过编译,但运行结果没有任何意义。所以,如果要生成常对象,必须显示定义其对应的构造函数,完成对象的初始化工作。...switch(i) { case 1:int j=5;break; case 2:cout<<"Hello"<<endl; } } GNU C++和VC...由于C++没有强制switch语句的各case分支使用break,所以在一个case分支中定义的变量是可能被其他分支的语句使用的。由于case分支被执行的随机性,无法保证变量获得初值。...解决办法: (1)除非只有一个case分支,否则不要在case分支中定义局部变量; (2)可以将case分支至于代码块中,用大括号包围,限制case分支定义的变量的作用域在代码块作用域中。

    1.2K10

    新160个CrackMe分析-第5组:41-50(上)

    0地址之前,注册了一个SEH处理函数,所以这里就让SEH来处理异常,我们去SEH里下断点(4024D0),同时设置x86dbg忽略0xc0000005异常程序成功在异常处理里断下了,如果只是简单的通过让调试器接管异常使得程序不能进行下去来反调试...,在调试器下,处理不了的异常就交给调试器了,只有在无调试器情况下才会交给终极异常处理让程序正常执行,从而达到反调试的效果也正因为处理不了的异常会交给调试器,所以调试的时候能见到同一个异常出现了很多次程序都不退出这里因为在调试器下没法进入这个终极异常处理...然后通过交叉引用定位找到窗口创建函数,在上面不远处看到窗口过程函数:这个函数很简单:就处理一个事件查阅资料[3]可知,按钮按下的事件是一个WM_COMMAND消息,这个按钮ID刚好是e33,那这个处理就是按钮按下的过程了(实际测试,在动态调试器下...= 0;char serial[100];char name[100];void GenSerial1() {    midValue = strlen(name);    sprintf(serial...,"tsrh-%d-",midValue+0x7d3);}void GenSerial2() {    int len = strlen(serial);    int tmp = midValue;

    88700

    C++:29 --- C++继承关系下的内存布局(下)

    很不幸,在C++中,这种“共享继承”被称为“虚继承” ,把问题搞得似乎很抽象。虚继承的语法很简单,在指定基类时加上virtual关键字即可。...在VC++中,G拥有一个隐藏的“虚基类表指针”成员,指向一个虚基类表,该表的第二项是G dGvbptrC。...先根据P和R在S中的偏移,调整this为P*,也就是S*,然后跳转到相应的虚函数处执行。 在微软VC++实现中,对于有虚函数的多重继承,只有当派生类虚函数覆盖了多个基类的虚函数时,才使用调整块。...6 调整块 正如已经描述的,有时需要调整块来调整this指针的值(this指针通常位于栈上返回地址之下,或者在寄存器中),在this指针上加或减去一个常量偏移,再调用虚函数。...因为VC++实现中,T::pvf()接受的是嵌套在T中的P的指针,所以,需要提供一个调整块,把this指针调整到T::t1之后(该处即是P在T中的位置)。

    1.3K20

    CCPP关于size_t类型的作用与重要性

    在标准C库中的许多函数使用的参数或者返回值都是表示的用字节表示的对象大小,比如说malloc(n) 函数的参数n指明了需要申请的空间大小,还有memcpy(s1, s2, n)的最后一个参数,表明需要复制的内存大小...,strlen(s)函数的返回值表明了以’\0’结尾的字符串的长度(不包括’\0’),其返回值并不是该字符串的实际长度,因为要去掉’\0’。   ...标准中记载malloc的申明应该出现在,定义为: void *malloc(size_t n);   memcpy和strlen的申明应该出现在中: void *memcpy(void *s1, void...因此,使用unsigned int修饰第三个参数的代价与int是相同的: void *memcpy(void *s1, void const *s2, unsigned int n);   这样似乎没有问题了...C++头文件, 等等中,你应该在你的头文件中至少包含一个这样的头文件在使用size_t之前。

    96230

    SEH学习

    dwFirstChance置1并发给调试器,让调试器来处理(也可能会不处理) _EXETPTION_DEBUG_INFO结构如下 typedef struct _EXCEPTION_DEBUG_INFO...EXCEPTION_RECORD ExceptionRecord; DWORD dwFirstChance; } EXCEPTION_DEBUG_INFO; Jetbrains全家桶1年46,售后保障稳定 2 没有调试器或者调试器不处理这个异常的话系统会找到程序线程中的异常处理程序并交由其处理...3 线程中可以有多个异常处理,如果一个无法处理则让其他来处理 4 如果都无法处理则系统将dwFirstChance置0,再通知调试器(如果有的话),如果没有调试器或者调试器继续不处理,而程序又曾经调用过...你可以在OD菜单中的查看-SEH链中找对最前的一个SEH handler地址在反汇编中查看 你也可以在其第一句代码处下断点,然后SHIFT+F9运行程序,程序会断在SEH handler第一句处 线程...下) 栈溢出时能被利用,也可以用来绕过安全机制 剩下的一小部分是VC++对SEH的封装: 这一部分迟点再更新 未完待续。

    60820

    C语言被指针手撕

    2.口语中的指针通常指的是指针变量,也就是存放内存的变量 2.指针变量的大小 在32位机器上,地址需要由32个二进制序列完成,所以地址需要四个字节的空间来存储,所以指针的大小在32位平台上就是四字节...至于为什么数组名和取地址数组名相同是因为指针中存储的是一个类型的起始地址。...两段有趣的代码 (*(void (*)())0)(); 首先可以发现void (* )()是一个函数指针类型,该指针指向的函数参数为空返回值为void,即不需要返回值。...; 解析: char arr[] = { 'a','b','c','d','e','f' }; printf("%d\n", strlen(arr));//随机值 //因为数组中没有\0,而strlen...写在后面 指针是C语言的重要内容,为了后续数据结构的学习,在C语言的学习过程中,我们应该要把指针,结构体,动态内存管理这三章学好。 要坚持学习坚持进步啊。

    38500

    VLC播放器加载恶意字幕文件导致执行任意代码漏洞分析与POC实现

    堆缓冲区溢出的利用思路一般是实现out-of-bounds write,根据write的数据不同,又有更具体的细分(实际上有的利用方法在最新的os里面已经失效了) 覆盖heap链表的元数据,实现write...从patch里面可以看到,shift似乎受我们控制,但是这里只能实现越界读,并不能实现越界写。 剩下最后一个了,看看有没有惊喜。...这部分代码是在switch的这个分支里面:case ‘\’: 这里psz_text被加了两次,然后switch的break出去之后,还有一次psz_text++;总共加了3次。...如果你用调试器自己一遍运行流程的话,你会发现,psz_text的地址似乎有可能每次都一样的。 是不是想到了什么?对的,就是类似heap spraying。...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\C 在调试器里验证的结果

    1.1K40

    32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式

    然后确定,然后打开 系统变量中的path ?...DLL路径, 这样相当于当另一个进程 调用了LoadLibray,并且加载我们的DLL,而利用DLL被加载会执行的机制, 然后在我们的DLL中写入被加载时候的代码即可....(对于为什么我们确定loadlibary在远程进程中,其实这个是系统的特性,重要你软件一启动,就必然要有dll的支持 而我们调用的loadlibary就在这些dll中) 废话补多少,会的人请看今天重要的知识...一会OD调试一下看看 至于为什么写入的代码要ret 4,也就是start上面的那句话,是因为 下面我们调用CreateRemoteThread的时候,其中一个参数是@lpbuf,我们是当做函数调用的,所以压入一个返回地址...dll在内存中的实例句柄,所以我们需要释放掉.

    2.8K60

    代码安全性和健壮性:如何在if和assert中做选择?

    函数调用的返回结果是否有效? 4. 打开一个文件是否成功? 对这一类的边界条件进行检查的手段,一般都是使用 if 或者 assert 断言,无论使用哪一个,都可以达到检查的目的。...assert.h 头文件中,有如下定义: #ifdef NDEBUG #define assert(condition) ((void)0) #else #define assert(condition...从上面的定义中可以看到: 如果定义了宏 NDEBUG,那么 assert() 宏将不做什么动作,也就是相当于一条空语句:(void)0;,当在 release 阶段编译代码的时候,都会在编译选项中(Makefile...首先声明一点:以上这 2 种检查方式,在实际的代码中都很常见,从功能上来说似乎也没有什么影响。因此,没有严格的错与对之分,很多都是依赖于每个人的偏好习惯不同而已。...在开发阶段,编译选项中不定义 NDEBUG 这个宏,那么 assert 就发挥作用; 2.

    90320

    VC++6.0入门——第一讲,认识VC++6.0,新建工程等

    WinMain是Windows程序的入口点函数,与DOS程序的入口点函数main的作用相同,当WinMain函数结束或返回时,Windows应用程序结束。...为了证实这一点,我们在WM LBUTTONDOWN消息的响应代码中,调用MessageBox函数弹出一个提示信息,告诉用户“点击了鼠标”。接下来,我们在窗口中(0,50)的位置处输出一行文字。...Projects”选项卡下,选择“Win32 Application”,在右侧的“Project name:”文本框中,输入我们的工程名WinMain(如图1.4所示),单击【OK】按钮。...2.在Win32 Application-Step1of1中,选择“An empty project”(如图1.5所示),单击【Finish】按钮。...单击【File】菜单,选择【New】,在“Files”选项卡下,选择“C++Source File”,在右侧的“File”文本框中,输入源文件的文件名WinMain(如图1.6所示),单击【OK】按钮.

    20420
    领券