Questions tagged «c»

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

28
全局变量不好吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 3年前关闭。 改善这个问题 在C / C ++中,全局变量是否如我的教授所认为的那么糟糕?
247 c++  c  global-variables 

7
size_t与uintptr_t
C标准保证该size_t类型可以容纳任何数组索引。从逻辑上讲,这意味着size_t应该能够容纳任何指针类型。我在Google上发现的一些网站上读到这是合法的,并且/或者应该一直有效: void *v = malloc(10); size_t s = (size_t) v; 因此,在C99中,该标准引入了intptr_t和uintptr_t类型,保证可以容纳指针的有符号和无符号类型: uintptr_t p = (size_t) v; 那么使用size_t和之间有什么区别uintptr_t?两者都是无符号的,并且都应该能够容纳任何指针类型,因此它们在功能上似乎相同。除了清晰度之外,是否有任何真正令人信服的理由使用uintptr_t(或更好的是void *)而不是size_t?在不透明的结构中,该字段仅由内部函数处理,是否有任何理由不这样做呢? 出于同样的原因,ptrdiff_t它是一个有符号的类型,能够保存指针差异,因此能够保存大多数指针,那么它与intptr_t有何区别? 所有这些类型难道不是都为同一个功能提供了完全不同的版本吗?如果没有,为什么?我不能对其中一个进行处理,而对另一个却不能进行处理?如果是这样,为什么C99在该语言中添加了两种本质上多余的类型? 我愿意忽略函数指针,因为它们不适用于当前问题,但是我可以随意提及它们,因为我有一个偷偷摸摸的怀疑,它们将是“正确”答案的核心。
246 c  pointers  size-t 

9
检测到堆栈粉碎
我正在执行我的a.out文件。执行后,程序将运行一段时间,然后退出并显示以下消息: **** stack smashing detected ***: ./a.out terminated* *======= Backtrace: =========* */lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted* 可能是什么原因造成的,我该如何纠正?
246 c  exception  stack 




12
“切换”比“ if”快吗?
是一种switch说法实际上比更快的if声明? 我在带有/Ox标记的Visual Studio 2010的x64 C ++编译器上运行了以下代码: #include <stdlib.h> #include <stdio.h> #include <time.h> #define MAX_COUNT (1 << 29) size_t counter = 0; size_t testSwitch() { clock_t start = clock(); size_t i; for (i = 0; i < MAX_COUNT; i++) { switch (counter % 4 + 1) { case 1: counter += …

14
为什么此for循环在某些平台上而不在其他平台上退出?
我最近开始学习C,并且正在上一门以C为主题的课程。我目前正在玩循环,并且遇到了一些奇怪的行为,我不知道该如何解释。 #include <stdio.h> int main() { int array[10],i; for (i = 0; i <=10 ; i++) { array[i]=0; /*code should never terminate*/ printf("test \n"); } printf("%d \n", sizeof(array)/sizeof(int)); return 0; } 在运行Ubuntu 14.04的笔记本电脑上,此代码未中断。它运行到完成。在我学校的运行CentOS 6.6的计算机上,它也可以正常运行。在Windows 8.1上,循环永远不会终止。 更奇怪的是,当我将for循环条件编辑为:时i <= 11,代码仅在运行Ubuntu的笔记本电脑上终止。它永远不会在CentOS和Windows中终止。 谁能解释内存中发生了什么,以及为什么运行相同代码的不同OS会产生不同的结果? 编辑:我知道for循环超出范围。我是故意的 我只是无法弄清楚在不同的操作系统和计算机上行为如何不同。

14
如何在C中实现函数重载?
有什么方法可以在C中实现函数重载吗?我正在看简单的函数要重载像 foo (int a) foo (char b) foo (float c , int d) 我认为没有直接的方法。我正在寻找解决方法(如果存在)。
240 c  overloading 

7
了解C语言中函数指针的typedef
当我阅读其他人的代码时,总是感到有些困惑,因为他们的代码带有用于带参数的函数的指针的typedef。我记得,花了一段时间才尝试理解这样的定义,同时又试图理解用C语言编写的数字算法。那么,您能否就如何为函数指针(“做”和“不做”)编写好的typedef共享您的提示和想法,以及它们为什么有用以及如何理解他人的工作?谢谢!



10
如何在C中正确使用extern关键字
我的问题是,何时应使用externC中的关键字引用函数。 我看不到何时应该在实践中使用它。在编写程序时,我使用的所有功能都可以通过包含的头文件使用。那么,为什么extern访问头文件中未公开的内容很有用? 我可能正在考虑extern工作方式不正确,如果是这样,请纠正我。 编辑:extern当它是在头文件中没有关键字的默认声明时,您应该做些什么吗?
235 c 

26
面试问题:检查一个字符串是否是另一字符串的旋转[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我的一个朋友今天在面试中被问到以下问题,询问软件开发人员的职位: 给定两个字符串s1,s2您将如何检查是否s1为的旋转版本s2? 例: 如果是,s1 = "stackoverflow"那么以下是其一些轮换版本: "tackoverflows" "ackoverflowst" "overflowstack" 其中,作为"stackoverflwo"是不旋转的版本。 他给出的答案是: 取s2,发现为子串最长前缀s1,这将使你的旋转点。找到该点后,s2在该点断开以获取s2a和s2b,然后检查是否concatenate(s2a,s2b) == s1 对于我和我的朋友来说,这似乎是一个很好的解决方案。但是面试官却不这么认为。他要求一个更简单的解决方案。请告诉我您将如何做来帮助我Java/C/C++? 提前致谢。
235 java  c++  c 

13
从fgets()输入中删除结尾的换行符
我试图从用户那里获取一些数据,并将其发送到gcc中的另一个函数。代码是这样的。 printf("Enter your Name: "); if (!(fgets(Name, sizeof Name, stdin) != NULL)) { fprintf(stderr, "Error reading Name.\n"); exit(1); } 但是,我发现它最后有一个换行符\n。因此,如果我输入,John它将最终发送出去John\n。我该如何删除\n并发送正确的字符串。
235 c  string  gcc  newline  fgets 

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.