- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个代码遇到了 strncmp() 的段错误,我在下面有这个信息:
#7 0x00007f3662e5d4e7 in __strncmp_sse42 () from /lib64/libc.so.6
(gdb) info locals
No symbol table info available.
(gdb) info args
No symbol table info available.
(gdb) info frame
Stack level 7, frame at 0x7f35f4413b70:
rip = 0x7f3662e5d4e7 in __strncmp_sse42; saved rip = 0x7f35f64f5d6d
called by frame at 0x7f35f4413cc0, caller of frame at 0x7f35f4413b68
Arglist at 0x7f35f4413b60, args:
Locals at 0x7f35f4413b60, Previous frame's sp is 0x7f35f4413b70
Saved registers:
rip at 0x7f35f4413b68
有没有办法检查传递给这个函数的参数?任何解释都将帮助我了解正在发生的事情。
提前感谢您的帮助。
最佳答案
跟踪传递给系统调用的参数的一种方法是使用 ltrace
。并不总是保证有帮助,但尝试起来又快又轻松。下面是使用 ltrace 跟踪通过特定调用 grep
命令进行的调用的示例:
$ ltrace -s 200 grep XYZ hello.cc 2>&1 | grep XYZ
memcpy(0xe7f030, "XYZ\0", 4) = 0xe7f030
memchr("XYZ", '\n', 3) = nil
memcpy(0xe7f6b0, "XYZ", 3) = 0xe7f6b0
strlen("XYZ") = 3
strncmp("Y", "XYZ", 3) = 1
strncmp("XYZ", "Y", 1) = -1
strlen("XYZ") = 3
strcmp("XYZ", "XYZ") = 0
strlen("XYZ") = 3
memcpy(0xe7f630, "XYZ\0", 4) = 0xe7f630
strlen("XYZ") = 3
memcpy(0xe7f840, "XYZ", 3) = 0xe7f840
关于c++ - gdb - 查找 strncmp() 函数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58645075/
据我了解,strcmp()(无“n”)在任一参数中看到空字符后,立即停止处理并返回结果。 因此,如果已知 100% 确定其中一个参数以 null 结尾(例如,它是一个字符串文字),则使用 strncm
我找不到我的 parse() 函数中的问题。简短介绍:我从我的终端程序发送“boot\r\n”,调用了 parse() 函数,strncmp(buffer, "boot",4) 永远不会进入 if 分
我尝试创建我自己的学校项目所需的 strncmp 函数,我运行使用相同 srcmp 函数的代码,但提供了我想要比较的 ASCII 代码的限制大小: 编码: #include int strn
我在使用 strncmp 时遇到问题。据我了解,理论上,如果两个字符串比较的字符相等,strncmp 应该返回 0;但是,当我进行比较时,代码行为不当并产生误报(不等于字符,仍然会产生 if 子句)。
该程序应该允许用户输入一些名称(直到用户希望继续),然后按升序显示这些名称。我使用了 strncmp 函数来比较 char 数组。但是,当运行此命令时,只有已排序名称列表的第一个和最后一个名称作为输出
这段代码在“check_connected”过程中有一个奇怪的行为。使用strncmp函数之前将参数转换为char[30],如果不转换,结果是“堆栈溢出”。问题出现在两个字符串的比较结果中,“Le s
我有一个静态检查器,它提示在 if 条件下使用 strncmp,说 Logical operation performed on expression with possible side effec
我真的是 C 的新手,但我已经编写 C++ 有一段时间了。我正在写一个客户端服务器聊天程序。在用户输入用户名后,我需要在 session 开始时提示用户几个不同的选项。起初我试图使用 getchar(
我不知道如何在 C 中使用字符串: 这是我的服务器的一部分:中断永远不会被调用,即使我通过 telnet 提供了字符“/”。 理想情况下,这将通过将字符串 ch 一遍又一遍地添加到它来缓冲名为 get
在运行下面的代码时,我看到出现了 "x,y" 模式。此模式正在此处打印:printf("%s", start);。但是 if (strncmp(cp, VAL, strlen(VAL) == 0 ))
我一直在解决 strncmp 和 getline 的问题...所以我做了一个小测试应用程序。 strncmp 给出误报,我不知道我做错了什么。 这是程序 #include FILE *fp=NULL
我目前有一个正在运行的链表结构,我需要找到一种方法让用户在该结构中搜索某个字段。我已经完成了,但问题是它必须是准确的。例如,如果用户输入“maggie”它会返回结果,但是如果用户输入“mag”它不会像
这是快速背景:我有一个客户端程序和一个服务器程序,它们通过 Unix 套接字相互通信。在服务器端解析收到的消息时,我试图使用 strncmp 来确定要采取的操作。 我遇到的问题是弄清楚 strncmp
Fortify 表示这是越界读取: if (strncmp("test string", "less than 32 char", 32) == 0) { ... } 表示函数从小于32个字符的边界外
如果输入是 end,strncmp("end",input,3) == 0 不应该返回 0 吗?但它返回一个 > 0 的数字。 #include int main(void) { char *s
我正在尝试编写一个比较数字前两位数字的函数,并且由于 itoa 不可用,因此我使用之前通过谷歌搜索找到的 sprintf 首先将数字转换为字符串,然后比较每个数字。由于某种奇怪的原因,当我运行这个程序
在这个关于带有信号量的共享内存(生产者/消费者)的程序中(在 DEBIAN 上),当我使用带有字符串“end”的 strncmp 函数时,为了打开 0 标志(运行)来终止 while 循环, strn
我是 C 代码新手。对于此特定代码,如果用户输入名称 john, “john is Cool” 将被打印。我认为我没有正确使用 strncmp() 。有人可以帮忙吗? #include #inclu
在我输入10个名字后,我必须打印所有以A开头的名字。它不打印任何内容 #include #include #include void main(void) { int i; char
为了在我的代码中进行文件排序,我使用了 strncmp 来比较每个字符串的第一个元素。 在这里包括我的代码: 代码 1: for (i = 1; i < file_cnt; ) { if ((st
我是一名优秀的程序员,十分优秀!