Questions tagged «c»

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



8
用黄金代替ld-有经验吗?
有没有人尝试使用gold代替ld? gold 有望比更快ld,因此它可以帮助加快大型C ++应用程序的测试周期,但是可以用作ld的直接替代品吗? 可以gcc/g++直接呼叫gold。吗? 是否有任何已知的错误或问题? 尽管gold已经有一段时间成为GNU binutils的一部分了,但我在网络上几乎找不到“成功案例”甚至“ Howtos”。 (更新:添加了指向黄金的链接和解释它的博客条目)

9
永远不会执行的代码可以调用未定义的行为吗?
调用未定义行为(在此示例中为零)的代码将永远不会执行,程序是否仍是未定义行为? int main(void) { int i; if(0) { i = 1/0; } return 0; } 我认为这仍然是不确定的行为,但是我在标准中找不到任何证据来支持或否认我。 那么,有什么想法吗?

1
使用模量添加C
我遇到了一个有趣的C代码,可以打印出来A + B,但是我很难理解它。 输入格式: A B 其中A,B是介于之间的整数,0并10用单个空格分隔。 码: main( n ) { gets( &n ); printf("%d", n % 85 - 43); } 这是用于简短编码的,请不要在意警告。 到目前为止,我的理解是: gets( &n )将A,空格和B的ASCII值存储在的低三字节中n。例如,A = 3和B = 8将产生n = 0x00382033。给定条件可以防止n溢出。但是我不知道n % 85 - 43产量如何A + B。 您如何得出这些数字?
81 c  addition  mod 

9
strcpy与memcpy
memcpy()和之间有什么区别strcpy()?我试图在程序的帮助下找到它,但是两者都给出了相同的输出。 int main() { char s[5]={'s','a','\0','c','h'}; char p[5]; char t[5]; strcpy(p,s); memcpy(t,s,5); printf("sachin p is [%s], t is [%s]",p,t); return 0; } 输出量 sachin p is [sa], t is [sa]
81 c  memcpy  strcpy 

6
为什么一次不自动假定#pragma?
告诉编译器只包含一次文件有什么意义?默认情况下是否有意义?甚至没有理由多次包含一个文件吗?为什么不只是假设呢?与特定的硬件有关吗?
81 c++  c  pragma 

11
为什么首选uint32_t而不是uint_fast32_t?
似乎uint32_t比uint_fast32_t(我意识到这是轶事证据)更普遍。不过,这对我来说似乎违反直觉。 几乎总是在我看到实现使用时uint32_t,它真正想要的是一个整数,最多可以容纳4,294,967,295(通常在65,535和4,294,967,295之间的下限)。 然后使用似乎很奇怪uint32_t,因为不需要“完全32位”保证,而“最快可用> = 32位”保证uint_fast32_t似乎是正确的主意。而且,尽管通常会实现它,uint32_t但实际上并不能保证它存在。 那么,为什么会uint32_t优先呢?它是更容易为人所知,还是在技术上有其他优势?
81 c++  c  int 

6
如何防止scanf导致C中的缓冲区溢出?
我使用以下代码: while ( scanf("%s", buf) == 1 ){ 防止缓冲区溢出以使其可以传递随机长度的字符串的最佳方法是什么? 我知道我可以通过调用例如来限制输入字符串: while ( scanf("%20s", buf) == 1 ){ 但是我更希望能够处理用户输入的任何内容。还是不能使用scanf安全地完成此操作,而我应该使用fgets?

10
C中的字符串填充
我写了应该做StringPadRight(“ Hello”,10,“ 0”)->“ Hello00000”的函数。 char *StringPadRight(char *string, int padded_len, char *pad) { int len = (int) strlen(string); if (len >= padded_len) { return string; } int i; for (i = 0; i < padded_len - len; i++) { strcat(string, pad); } return string; } 它可以工作,但有一些怪异的副作用……其他一些变量被更改了。我怎样才能解决这个问题?
81 c  string  padding 

7
linux在哪里存储我的系统日志?
我编写了一个简单的测试应用程序,将某些内容记录到日志文件中。我正在使用linux mint,在应用程序执行后,我尝试使用以下命令查看日志: tail -n 100 /var/log/messages 但是文件消息既不经过测试也不存在。在下面可以找到我的代码。也许我做错了什么,文件没有存储在那儿,或者我需要启用Linux Mint中的登录功能。 #include <stdio.h> #include <stdlib.h> #include <syslog.h> void init_log() { setlogmask(LOG_UPTO(LOG_NOTICE)); openlog("testd",LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); } int main(void) { init_log(); printf("Session started!"); syslog(LOG_NOTICE, "Session started!!"); closelog(); return EXIT_SUCCESS; }
81 c  linux  logging 

7
使用无符号而不是带符号的int更有可能导致错误吗?为什么?
在《Google C ++样式指南》的“无符号整数”主题上,建议 由于历史原因,C ++标准还使用无符号整数来表示容器的大小-标准主体的许多成员认为这是一个错误,但实际上目前无法修复。无符号算术不对简单整数的行为进行建模,而是由标准定义以对模块化算术进行建模(围绕上溢/下溢进行环绕),这一事实意味着编译器无法诊断出大量的错误。 模块化算法有什么问题?这不是unsigned int的预期行为吗? 该指南指的是哪种错误(重要的类)?错误溢出? 不要仅使用无符号类型来断言变量是非负数。 我可以想到在未签名的int上使用有符号的int的原因之一是,如果它确实溢出(变为负数),则更易于检测。

7
C中是否有任何“设计模式”?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我知道设计模式通常与OO编程相关,但是您在编程C时是否经常使用某些模式? 我对经典OO模式的简单翻译不感兴趣,请不要提及Duff的设备。;-)

6
检测CPU架构的编译时间
编译C或C ++代码时找出CPU体系结构的最可靠方法是什么?据我所知,不同的编译器有自己的一组非标准预处理器定义(_M_X86在MSVS中__i386__,__arm__在GCC中等)。 有没有检测我要构建的体系结构的标准方法?如果不是,是否有针对各种编译器的此类定义的完整列表的来源,例如带有所有样板文件的标头#ifdef?

7
用一个值初始化整个2D数组
带有以下声明 int array[ROW][COLUMN]={0}; 我得到全零但下面的一个数组 int array[ROW][COLUMN]={1}; 我没有获得所有值的数组。默认值仍为0。 为什么会出现这种现象,以及如何用全1初始化? 编辑:我刚刚了解到,将memsetvalue用作1会将每个字节设置为1,因此每个数组单元的实际值不会为1而是16843009。如何将其设置为1?

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.