Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

6
fps游戏中的瞄准机器人如何工作?
我很好奇,是否有人对在线FPS游戏(例如Counter-Strike)中的瞄准机器人有任何经验/知识。我很好奇,想了解更多有关光标如何知道如何锁定对面玩家的信息。显然,如果我想作弊,我可以去下载一些作弊,所以这更多的是学习。它涉及什么?他们是否钩住用户的鼠标/键盘以将光标移动到正确的位置?作弊应用程序如何知道确切指向光标的位置?作弊应用程序必须能够访问游戏应用程序中的数据,这是如何实现的? 编辑:sids答案,人们如何获得那些已知的内存位置来从中获取数据?EDIT2:可以说我使用调试程序或其他方法在位置0xbbbbbbbb处找到了一些想要的值。现在我该如何访问和使用存储在应用程序中该位置的数据,因为我不拥有该内存,而游戏却拥有。还是因为我已经注入到进程中并可以使用memcpy或其他东西复制该地址处的内存,所以现在可以访问它了? 还有其他人要补充吗?尝试尽可能多地了解这一点!
71 c++  c  hook 

4
在功能名称前加星号的功能是什么?
我对在大多数C程序上看到的对我来说不熟悉的函数声明感到困惑。 void *func_name(void *param){ ... } *该功能意味着什么?我对*变量类型()的理解是,它创建了一个指向另一个变量的指针,因此它可以跟踪将后一个变量存储在内存中的地址。但是在这种情况下,我不知道这个*星号意味着什么。
71 c  function  pointers 

6
用于memcpy的增强型REP MOVSB
我想使用增强的REP MOVSB(ERMSB)为自定义获取高带宽memcpy。 ERMSB是与Ivy Bridge微体系结构一起引入的。如果您不知道什么是ERMSB,请参阅英特尔优化手册中的“增强型REP MOVSB和STOSB操作(ERMSB)”部分。 我知道直接执行此操作的唯一方法是内联汇编。我从https://groups.google.com/forum/#!topic/gnu.gcc.help/-Bmlm_EG_fE获得了以下功能 static inline void *__movsb(void *d, const void *s, size_t n) { asm volatile ("rep movsb" : "=D" (d), "=S" (s), "=c" (n) : "0" (d), "1" (s), "2" (n) : "memory"); return d; } 但是,当我使用它时,带宽远小于memcpy。 我的i7-6700HQ(Skylake)系统,Ubuntu 16.10,DDR4 @ 2400 MHz双通道32 GB,GCC 6.2可达到__movsb15 GB / …
71 c  gcc  assembly  x86  memcpy 

3
C ++:将一个操作数保留在寄存器中的速度大大提高
我一直在尝试通过定时使用以下代码对数组元素进行缩放和求和的例程来了解在L1缓存中存储数组对内存的影响(我知道我应该将结果按'最后是a';关键是要在循环内进行乘法和加法-到目前为止,编译器尚未弄清楚要分解出'a'): double sum(double a,double* X,int size) { double total = 0.0; for(int i = 0; i < size; ++i) { total += a*X[i]; } return total; } #define KB 1024 int main() { //Approximately half the L1 cache size of my machine int operand_size = (32*KB)/(sizeof(double)*2); printf("Operand size: %d\n", operand_size); …

8
复杂的C声明
我只是在浏览Internet上的一些代码后发现: float * (*(*foo())[SIZE][SIZE])() 我如何阅读此声明?是否有一组特定的规则来读取这种复杂的声明?

22
如何获得两个数组之间的交集作为新数组?
在各种情况下,我多次面对这个问题。尽管我熟悉C或Java,但它对所有编程语言都是通用的。 让我们考虑两个数组(或集合): char[] A = {'a', 'b', 'c', 'd'}; char[] B = {'c', 'd', 'e', 'f'}; 如何获得两个数组之间的公共元素作为新数组?在这种情况下,数组A和B的交集为char[] c = {'c', 'd'}。 我想避免一个数组在另一个数组内的重复迭代,这将使执行时间增加(A的长度乘以B的长度),这对于大型数组而言实在太多了。 有什么方法可以在每个数组中进行一次传递来获取公共元素?
70 java  c++  c  algorithm 

10
C如何将“二叉树”绘制到控制台上
关闭。这个问题需要调试细节。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 可以使用哪些算法在控制台中绘制二叉树?该树用C实现。例如,编号为:2 3 4 5 8的BST在控制台中显示为:

9
如何在C中实现循环缓冲区?
我需要一个固定大小(可在运行时在创建时选择,而不是在编译时选择)的循环缓冲区,该缓冲区可以容纳任何类型的对象,并且需要非常高性能。我认为不会出现资源争用问题,因为尽管它是在多任务嵌入式环境中,但它是一种协作的环境,因此任务本身可以管理它。 我最初的想法是在缓冲区中存储一个简单的结构,该结构将包含类型(简单的enum / define)和一个指向有效负载的空指针,但是我希望这样做尽可能快,因此我对涉及绕过的建议持开放态度堆。 实际上,我很高兴绕过任何标准库以提高原始速度-从我对代码的了解来看,它没有针对CPU进行过大幅优化:看起来他们只是为诸如此类的东西编译了C代码,strcpy()没有手工编码的程序集。 任何代码或想法将不胜感激。所需的操作是: 创建具有特定大小的缓冲区。 放在尾巴。 从头上得到。 返回计数。 删除缓冲区。

5
按位运算符和“字节序”
是否字节顺序在所有问题与位操作?任一逻辑或移位? 我正在从事按位运算符的作业,我无法在上面做任何事情,而且我想我对持久性很感兴趣。就是说,我使用的是小端机(就像大多数机器一样),但这是否需要考虑?或者这是一个浪费的事实? 万一重要,我正在使用C。

4
是否可以确定持有互斥锁的线程?
首先,我使用pthread库编写多线程C程序。线程总是被等待的互斥锁挂起。当我使用strace实用程序查找线程处于FUTEX_WAIT状态时,我想知道当时哪个线程持有该互斥量。但是我不知道该怎么做。有没有公​​用事业可以做到这一点? 有人告诉我Java虚拟机支持此功能,因此我想知道Linux是否支持此功能。

5
在C和C ++中使用逗号代替分号的效果
在重构C和C ++的各种代码时,我注意到很多时候使用逗号而不是分号来分隔语句。像这样的东西; int a = 0, b = 0; a = 5, b = 5; 我本来期望的 int a = 0, b = 0; a = 5; b = 5; 我知道C和C ++允许使用逗号分隔语句(特别是循环头),但是这两段代码之间有什么区别?我的猜测是逗号是剪切和粘贴的结果,但这是一个错误,会影响执行吗?
70 c++  c 

5
在C中强制转换指针的规则是什么?
K&R不会超越它,但他们会使用它。我尝试通过编写示例程序来了解其工作原理,但效果并不理想: #include <stdio.h> int bleh (int *); int main(){ char c = '5'; char *d = &c; bleh((int *)d); return 0; } int bleh(int *n){ printf("%d bleh\n", *n); return *n; } 它可以编译,但是我的print语句吐出垃圾变量(每次调用程序时它们都不同)。有任何想法吗?
70 c  pointers  casting 

4
什么是内在函数?
Наэтотвопросестьответына堆栈溢出нарусском:Чтотакоеинтринсики(内在)? 谁能解释它们是什么以及为什么我需要它们?如果需要使用内部函数,我将构建哪种应用程序?
70 c++  c  intrinsics 

3
如何在C中串联字符串和整数?
我需要在循环的每次迭代内形成一个字符串,其中包含循环索引i: for(i=0;i<100;i++) { // Shown in java-like code which I need working in c! String prefix = "pre_"; String suffix = "_suff"; // This is the string I need formed: // e.g. "pre_3_suff" String result = prefix + i + suffix; } 我尝试使用strcat和itoa没有运气的各种组合。
70 c  string 

7
通过引用在C中传递数组?
如何在C中通过引用传递结构数组? 举个例子: struct Coordinate { int X; int Y; }; SomeMethod(Coordinate *Coordinates[]){ //Do Something with the array } int main(){ Coordinate Coordinates[10]; SomeMethod(&Coordinates); }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.