小编Bla*_*iev的帖子

如何选择填充常量的多行?

在SQL语句中选择常量而不引用表是完全合法的:

SELECT 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

后者返回的结果集是包含值的单行.我想知道是否有一种方法可以使用常量表达式一次选择多行,有点像:

SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))
Run Code Online (Sandbox Code Playgroud)

我希望像上面这样的东西工作并返回一个包含3行和3列的结果集.

sql select constants

154
推荐指数
8
解决办法
16万
查看次数

strcpy()返回值

标准C库中的许多函数,尤其是用于字符串操作的函数,最显着的是strcpy(),共享以下原型:

char *the_function (char *destination, ...)
Run Code Online (Sandbox Code Playgroud)

这些函数的返回值实际上与提供的相同destination.你为什么要浪费多余的回报价值呢?这样的函数无效或返回有用的东西更有意义.

我唯一的猜测是,为什么将函数调用嵌套在另一个表达式中更容易,更方便,例如:

printf("%s\n", strcpy(dst, src));
Run Code Online (Sandbox Code Playgroud)

还有其他合理的理由来证明这个成语吗?

c function strcpy

26
推荐指数
3
解决办法
2万
查看次数

ptrace如何在Linux中运行?

ptrace系统调用允许父进程来检查连接的孩子.例如,在Linux中,strace(通过ptrace系统调用实现)可以检查子进程调用的系统调用.

当附加的子进程调用系统调用时,可以通知ptracing父进程.但究竟是怎么发生的呢?我想知道这个机制背后的技术细节.

先感谢您.

c linux debugging ptrace strace

24
推荐指数
1
解决办法
5563
查看次数

转换void指针

我在旧的C代码中看到了很多以下内容:

type_t *x = (type_t *) malloc(...);
Run Code Online (Sandbox Code Playgroud)

从那里malloc()开始返回指针的重点是什么void *?是因为较旧的C编译器不支持void指针而是malloc()习惯返回char *

c pointers void-pointers

17
推荐指数
2
解决办法
3万
查看次数

是否可以在标准C中执行堆栈中的代码?

以下代码不能按预期工作,但希望说明我的尝试:

long foo (int a, int b) {
  return a + b;
}

void call_foo_from_stack (void) {
  /* reserve space on the stack to store foo's code */
  char code[sizeof(*foo)];

  /* have a pointer to the beginning of the code */
  long (*fooptr)(int, int) = (long (*)(int, int)) code;

  /* copy foo's code to the stack */
  memcpy(code, foo, sizeof(*foo));

  /* execute foo from the stack */
  fooptr(3, 5);
}
Run Code Online (Sandbox Code Playgroud)

显然,sizeof(*foo)不返回foo()函数代码的大小.

我知道在某些CPU上执行堆栈是受限制的(或者至少在设置了限制标志的情况下).除了最终可以存储在堆栈中的GCC嵌套函数之外,还有一种方法可以在标准C中实现吗?

c stack executable

17
推荐指数
2
解决办法
3635
查看次数

typedef的指针类型被认为是不好的做法吗?

可能重复:
Typedef指针是个好主意?

我在许多使用过的API中都看到了这种奇怪之处:

typedef type_t *TYPE;
Run Code Online (Sandbox Code Playgroud)

我的观点是声明一个类型的变量TYPE将不会清楚地表明事实上已经声明了一个指针.

你和我一样认为这会带来很多困惑吗?这是否意味着强制执行封装,还是有其他原因?你认为这是一种不好的做法吗?

c pointers typedef

15
推荐指数
4
解决办法
5369
查看次数

重复的图像检测算法?

我正在考虑为图像创建一个数据库系统,在这里它们用紧凑的签名存储,然后与"查询图像"进行匹配,"查询图像"可以是存储的图像的调整大小,裁剪,增亮,旋转或翻转版本.请注意,我不是在谈论图像相似度算法,而是严格来说是重复检测.这会使事情变得简单得多.系统不关心两个图像是否有大象,只检测这两个图像是否实际上是同一图像是很重要的.

直方图比较根本不适用于裁剪的查询图像.我看到唯一可行的方法是形状/边缘检测.首先将图像以某种方式离散化,例如将每个像素转换为8级灰度.离散化的图像将包含相同颜色的大区域,这有助于指示形状.然后可以用系数描述这些形状,并且可以记住它们的相对位置.紧凑的签名将由此产生.当必须执行比较时,将对存储的每个图像以及每个查询图像执行该处理.这听起来像一个有效和可实现的算法?为了说明这个想法:

删除了死的ImageShack链接

我知道这是一个不成熟的研究领域,我已经阅读了关于这个主题的维基百科,我会请你提出你对这种算法的想法.

c algorithm image

14
推荐指数
1
解决办法
5033
查看次数

转换指针不会产生左值.为什么?

发布我最有争议的一个回答后在这里,我不敢问几个问题,并最终在我的知识填补一些空白.

为什么不是一种((type_t *) x)被认为是有效左值的表达式,假设它x本身是指针和左值,而不仅仅是某个表达式?

我知道很多人会说"标准不允许它",但从逻辑的角度看它似乎是合理的.标准不允许的原因是什么?毕竟,任何两个指针都具有相同的大小,指针类型只是一个编译时抽象,指示在进行指针运算时应该应用的适当偏移量.

c pointers casting lvalue

12
推荐指数
2
解决办法
3925
查看次数

文件锁定与信号量

出于好奇,在Linux上实现进程间同步的首选方法是什么?该sem*(2)系统调用的家人似乎有一个非常笨重,过时的接口,同时有三种方式来锁定文件- fcntl(),flock()lockf().

有什么内部差异(如果有的话)以及你如何证明每种差异的使用?

c unix linux interprocess

8
推荐指数
2
解决办法
9363
查看次数

C中的限定符和修饰符之间有什么区别?

我想知道限定符和修饰符之间的区别.有些书认为这volatile是一个修饰语,其他书则认为它是一个限定词.

那么关于变量究竟是什么修饰符和限定符?

c

8
推荐指数
1
解决办法
5652
查看次数