-
问题背景:
有时候GDB调试程序到半路不想调了,只想终止当前正在调试的程序,但是注意并不想退出GDB,怎么办?
解决方案-1:
直接运行 r 命令,让程序重新从头开始运行,此法差强人意;
解决方案-2:
直接执行kill 命令,默认是发送信号量15(SIGTERM)给当前调试进程,默认动作就是退出程序,推荐此法。
-
问题背景:
熟悉的代码会得到如题示的结果: printf("%u\n", (size_t)-1);
预备知识:
http://www.blogdaren.com/post-2615.html
解决方案:
0X01、整数1的二进制如下:
00000000000000000000000000000001
0X02、由于-1是负数,所以二进制的第一位需要取值为1即...
-
问题背景:
GDB调试C程序时,经常需要打印结构体的内容,默认情况下输出很不直观,看起来很费劲,比如:
(gdb) p *ht
$6 = {gc = {refcount = 1, u = {v = {type = 7 '\a', flags = 0 '\000', gc_info = 0}, type_info = 7}}, u = {v = {flags = 18 '\022', ...
-
问题背景:
-8 转换为二进制是多少?
解决方案:
第一步:将 8 转换为二进制得到:
00000000 00000000 00000000 00001000
第二步:由于-8是负数,所以可得其原码为:
10000000 00000000 00000000 00001000
第三步:根据原码继续取其反码从而得到二进...
-
问题背景:
阅读PHP内核代码期间,发现有大量的宏:EXPECTED(condition)、UNEXPECTED(condition),比如在HashTable的相关实现中就有如下代码片段:
if (nSize < HT_MIN_SIZE) {
nSize = HT_MIN_SIZE;
} else if (UNEXPECTED(nSize &...
-
问题背景:
int main()
{
int i = 100;
printf("%d %d\n", i++, i--);
return 0;
}
对于初学者而言,上面的代码会输出令人疑惑结果:100 99
问题原因:
printf()函数打印多个参数时,参数遵循"先进后出"的栈原则。
问题分析:
1、参数i入栈(i--中的i);...
-
问题背景:
国际象棋的棋盘为 8 * 8 的方格棋盘,现将 "马" 放在任意指定的方格中, 按照 "马走日" 的规则将 "马" 进行移动,要求每个方格只能进入一次,最终使得 "马" 走遍棋盘64个方格。
问题说明:
作者自行实现的代码好像有BUG,分享出来,望不吝赐教。
实现源码:
#include <stdio...
-
问题背景:
直接上代码:
#include <stdio.h>
int main()
{
int number, result;
do{
printf("请输入一个整数:");
result = scanf("%d", &number);
printf("你输入的整数是:%d\n", numbe...
-
问题背景:
1、如题所示,传统遍历数组的话,我们肯定是需要随时携带数组的长度参数以达到遍历数组的目的;
2、注意本文作者仅仅只是演示如何只借助指针来实现遍历数组,而无需携带数组长度参数,两种方法并不冲突;
解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <...
-
问题背景:
int main()
{
char *name;
...
-
再读C.Prime.Plus总结下个人对C语言指针的通俗理解:
1、初学者对指针很多时候觉得摸不着头脑,主要的一个原因是很多教材里面对指针的概念描述不严谨,比如指针或指针变量往往混为一谈,另对左值和右值描述不严谨;
2、其实我们说的指针,不,不应该叫指针,严谨起来就应该叫指针变量,如果你非要叫指针也可以,不管怎样,我们心里要明白其本质说的就是指针变量。举个例子,比如:
in...
我就遇到了这个问题,终于找到解决办法...