Questions tagged «c»

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

11
#pragma pack效果
我想知道是否有人可以向我解释#pragma pack预处理器语句的作用,更重要的是,为什么要使用它。 我检查了MSDN页面,该页面提供了一些见解,但我希望能从有经验的人那里听到更多。我以前在代码中已经看到过,尽管我似乎再也找不到了。

8
fprintf,printf和sprintf之间的区别?
任何人都可以用简单的英语有关之间的差异说明printf, fprintf以及sprintf结合实例? 这是什么流? 在阅读有关“ C语言中的文件处理”的内容时,我确实对这三个方法感到困惑。
233 c  io  stream  printf 

8
uint8_t vs未签名字符
在C 中使用uint8_tover有什么优势unsigned char? 我知道几乎每个系统uint8_t都只是typedef unsigned char,那么为什么要使用它呢?
231 c  typedef 

30
内存泄漏可以吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 2年前关闭。 改善这个问题 在C或C ++应用程序中是否存在内存泄漏,这是否可以接受? 如果您分配一些内存并在应用程序的最后一行代码使用之前使用它,该怎么办(例如,全局对象的析构函数)?只要内存消耗不会随着时间增长,是否可以信任操作系统以在应用程序终止时(在Windows,Mac和Linux上)为您释放内存?如果内存一直被使用直到被OS释放,您甚至会认为这是真正的内存泄漏。 如果第三方图书馆将这种情况强加给您怎么办?不管它有多大,都会拒绝使用该第三方库吗? 我只看到一个实际的缺点,那就是这些良性泄漏将在内存泄漏检测工具中显示为误报。
231 c++  c  memory-leaks 

11
为什么gets功能如此危险以至不应该使用它?
当我尝试gets()通过GCC 编译使用该函数的C代码时,收到以下警告: (.text + 0x34):警告:“ gets”功能很危险,不应使用。 我记得这与堆栈保护和安全性有关,但是我不确定为什么。 如何删除此警告,为什么会有这样的使用警告gets()? 如果gets()是如此危险,那我们为什么不能将其删除?
229 c  fgets  buffer-overflow  gets 


5
为什么GCC在实现整数除法时使用乘以奇数的乘法?
我一直在阅读div和mul汇编操作,我决定通过用C编写一个简单程序来看到它们的作用: 文件分割 #include <stdlib.h> #include <stdio.h> int main() { size_t i = 9; size_t j = i / 5; printf("%zu\n",j); return 0; } 然后使用以下命令生成汇编语言代码: gcc -S division.c -O0 -masm=intel 但是查看生成的division.s文件,它不包含任何div操作!取而代之的是,它执行某种带有移位和魔术数字的黑魔法。这是一个计算的代码片段i/5: mov rax, QWORD PTR [rbp-16] ; Move i (=9) to RAX movabs rdx, -3689348814741910323 ; Move some magic number to …


8
基本指针和堆栈指针到底是什么?他们指出了什么?
使用来自维基百科的示例,其中DrawSquare()调用DrawLine(), (请注意,此图在底部具有高地址,在顶部具有低地址。) 任何人都可以解释我什么ebp,并esp在这方面? 从我所看到的,我会说堆栈指针总是指向堆栈的顶部,而基本指针指向当前函数的开头?或者是什么? 编辑:我的意思是在Windows程序的上下文中 edit2:又如何eip运作? edit3:我有以下来自MSVC ++的代码: var_C= dword ptr -0Ch var_8= dword ptr -8 var_4= dword ptr -4 hInstance= dword ptr 8 hPrevInstance= dword ptr 0Ch lpCmdLine= dword ptr 10h nShowCmd= dword ptr 14h 它们似乎都是双字,因此每个占用4个字节。所以我可以看到从hInstance到var_4有4个字节的距离。这些是什么?我认为这是寄信人地址,如维基百科的图片所示? (编者注:从迈克尔的答案中删除了一个长引号,该引号不属于该问题,但编辑了一个后续问题): 这是因为函数调用的流程是: * Push parameters (hInstance, etc.) * Call function, which pushes return …
225 c++  c  assembly  x86 

10
超出范围访问数组有多危险?
在数组边界之外(在C中)访问数组有多危险?有时可能会发生以下情况:我从数组外部进行了读取(现在我了解到然后我会访问程序其他部分甚至更远的部分使用的内存),或者试图将值设置为数组外部的索引。该程序有时会崩溃,但有时只能运行,只会产生意外的结果。 现在我想知道的是,这到底有多危险?如果它破坏了我的程序,那还不错。另一方面,如果它由于我设法以某种方式设法访问了一些完全不相关的内存而破坏了程序外部的某些内容,那么我想这是非常糟糕的。我读到很多“可能发生的事情”,“分割可能是最不严重的问题”,“您的硬盘可能变粉并且独角兽可能正在您的窗户下面唱歌”这一切都很好,但是真正的危险是什么? 我的问题: 从程序外部读取值是否会破坏程序以外的任何内容?我可以想象只是看东西不会改变任何东西,还是会例如改变我碰巧到达的文件的“上次打开时间”属性? 设置值超出数组范围是否会损坏程序以外的任何内容?从这个 堆栈溢出问题可以看出,可以访问任何内存位置,并且没有安全保证。 现在,我从XCode中运行我的小程序。这样可以在程序无法到达其自身内存之外的程序周围提供一些额外的保护吗?会伤害XCode吗? 关于如何安全运行我的固有错误代码的任何建议? 我使用OSX 10.7,Xcode 4.6。
221 c  arrays  memory 



9
求平方和时是否需要显式处理负数或零?
我最近在课堂上做了一个测试。问题之一是: 给定一个数字n,用C / C ++编写一个函数,该函数返回该数字平方的数字总和。(以下内容很重要)。的范围的Ñ为[ - (10 ^ 7),10 ^ 7]。示例:如果n = 123,则您的函数应返回14(1 ^ 2 + 2 ^ 2 + 3 ^ 2 = 14)。 这是我写的函数: int sum_of_digits_squared(int n) { int s = 0, c; while (n) { c = n % 10; s += (c * c); n /= …
220 c 

9
如何为几行代码禁用GCC警告
在Visual C ++中,可以使用#pragma warning (disable: ...)。我也发现在GCC中,您可以覆盖每个文件编译器的标志。我该如何针对“下一行”或使用GCC在代码区域周围使用push / pop语义呢?

11
C Fopen vs开放
您是否有任何其他原因要使用(语法上的除外) FILE *fdopen(int fd, const char *mode); 要么 FILE *fopen(const char *path, const char *mode); 代替 int open(const char *pathname, int flags, mode_t mode); 在Linux环境中使用C时?
219 c  linux  unix  file-io  fopen 

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.