Questions tagged «c»

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


10
将int转换为4字节char数组(C)
嘿,我想将用户输入的int转换为4个字节,然后将其分配给字符数组。如何才能做到这一点? 例: 将用户输入175转换为 00000000 00000000 00000000 10101111 到目前为止,所有答案都存在问题,0 0 0 ff尽管输出为255,但应该转换为255 :0 0 0 ffffffff unsigned int value = 255; buffer[0] = (value >> 24) & 0xFF; buffer[1] = (value >> 16) & 0xFF; buffer[2] = (value >> 8) & 0xFF; buffer[3] = value & 0xFF; union { unsigned int …
77 c 

6
为什么在switch语句上出现奇怪的缩进?
为什么在switch语句中imho缺少的“ case”(关键字)缩进被认为是好的样式? 在几乎每个IDE中,似乎没有缩进“ case”关键字是默认的格式设置选项: switch (i){ case 0: break; case 1: break; } 虽然我发现这种格式更直观: switch (i){ case 0: break; case 1: break; } 这背后隐藏着一些逻辑吗?
77 java  c  syntax 

5
C-%x格式说明符
我有一个小问题。我知道%x格式说明符可用于在格式字符串攻击中从堆栈中读取值。 我发现以下代码: %08x%08x%08x%08x 08是什么意思?它到底在做什么?谢谢 :)
77 c  string  security  format 

9
为什么malloc在gcc中将值初始化为0?
平台之间可能有所不同,但是 当我使用gcc编译并运行下面的代码时,每次在ubuntu 11.10中获得0。 #include <stdio.h> #include <stdlib.h> int main() { double *a = (double*) malloc(sizeof(double)*100) printf("%f", *a); } 为什么即使有calloc,malloc的行为也是如此? 难道就意味着即使您不希望有时将值初始化为0,也会有不必要的性能开销吗? 编辑:哦,我以前的示例不是initiazling,而是碰巧使用“新鲜”块。 我恰好在寻找的是为什么它在分配一个大块时将其初始化: int main() { int *a = (int*) malloc(sizeof(int)*200000); a[10] = 3; printf("%d", *(a+10)); free(a); a = (double*) malloc(sizeof(double)*200000); printf("%d", *(a+10)); } OUTPUT: 3 0 (initialized) 但是感谢您指出在分配时有一个安全原因!(从未考虑过)。确保在分配新鲜块或大块时必须将其初始化为零。
77 c  linux  gcc  malloc 


15
什么时候整数<->指针强制转换正确?
民间传说说: 类型系统存在是有原因的。整数和指针是不同的类型,在大多数情况下,整数和指针之间的转换是不当行为,可能表示设计错误,应避免使用。 即使执行了这样的强制转换,也不应假设整数和指针的大小(强制void*转换int为使代码在x64上失败的最简单方法),而不int应该使用intptr_t或uintptr_tfrom stdint.h。 知道这一点,什么时候执行这样的转换真正有用? (注意:对于可移植性的价格,较短的代码并不算作“实际有用”。) 我知道一种情况: 一些无锁的多处理器算法利用了一个事实,即2个字节以上的指定指针具有一定的冗余性。例如,它们然后将指针的最低位用作布尔标志。对于具有适当指令集的处理器,这可以消除对锁定机制的需要(如果指针和布尔标志是分开的,则这是必要的)。 (注意:这种做法甚至可以通过java.util.concurrent.atomic.AtomicMarkableReference在Java中安全地进行) 更多的东西?
77 c++  c  pointers  casting 

1
此Valgrind警告是什么意思?-警告设置地址范围权限
在针对valgrind运行程序时,遇到以下警告。 Warning: set address range perms: large range [0x4d59d040, 0x6159d040) (undefined) Warning: set address range perms: large range [0x194f7030, 0x2d4f7050) (noaccess) Warning: set address range perms: large range [0x3959d030, 0x6159d050) (noaccess) 经过一番谷歌搜索后,我在这里发现它是一个Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions,告诉我的并不多。 我的程序确实在堆上分配了大量内存。(一整串后可以达到2-3 GB的内存realloc) 但是,尽管所有分配均未失败,但仍出现警告。 因此,我想知道此消息的真正含义是什么?我没有某种存储权限?(但分配成功)
77 c  memory  valgrind 

3
“ strlen(s1)-strlen(s2)”从不小于零
我目前正在编写一个C程序,该程序需要经常比较字符串长度,因此我编写了以下帮助程序函数: int strlonger(char *s1, char *s2) { return strlen(s1) - strlen(s2) &gt; 0; } 我注意到即使s1长度比短,该函数也会返回true s2。有人可以解释这种奇怪的行为吗?
77 c  string  debugging  unsigned 

13
.h文件在C中的异常用法
在阅读有关过滤的文章时,我发现.h文件有一些奇怪的用法-使用它填充系数数组: #define N 100 // filter order float h[N] = { #include "f1.h" }; //insert coefficients of filter float x[N]; float y[N]; short my_FIR(short sample_data) { float result = 0; for ( int i = N - 2 ; i &gt;= 0 ; i-- ) { x[i + 1] = …
77 c++  c 



10
C是开源的吗?
这可能是一个愚蠢的问题,但我一直对此感到疑惑。C(或其他任何低级语言)甚至都具有源代码,还是编译器是“完成所有工作”(包括解析)的部分?如果是这样,不同的编译器难道没有不同的C语言吗?stdlib在哪里影响因素?我真的很想知道这是如何工作的。

3
为什么指向“易失性”的指针(例如“ volatile int * p”)有用?
volatile告诉编译器不要优化引用,以便每次读/写操作都不会使用寄存器中存储的值,而是进行真正的内存访问。我可以理解它对于某些普通变量很有用,但不了解它如何volatile影响指针。 volatile int *p = some_addr; int a = *p; // CPU always has to load the address, then does a memory access anyway, right? 如果声明为,有什么区别int *p = some_addr?
77 c  pointers  volatile 

3
“ fork()”之后的printf异常
操作系统:Linux,语言:纯C 我正在学习一般的C编程,在特殊情况下学习UNIX下的C编程。 printf()使用fork()调用后,我检测到该函数的奇怪行为(对我而言)。 码 #include &lt;stdio.h&gt; #include &lt;system.h&gt; int main() { int pid; printf( "Hello, my pid is %d", getpid() ); pid = fork(); if( pid == 0 ) { printf( "\nI was forked! :D" ); sleep( 3 ); } else { waitpid( pid, NULL, 0 ); printf( "\n%d was …
77 c  linux  unix  printf  fork 

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.