Questions tagged «c»

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

15
strtok()如何在C中将字符串拆分为令牌?
请向我解释strtok()功能的作用。该手册说它将字符串拆分为令牌。我无法从手册中了解其实际功能。 我添加了手表,str并*pch在第一个while循环发生时检查其工作情况,其中的内容str仅为“ this”。屏幕上如何显示下面显示的输出? /* strtok example */ #include <stdio.h> #include <string.h> int main () { char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " ,.-"); } …
114 c  string  split  token  strtok 


4
带空格的左页printf
使用printf时,如何在字符串的左侧填充空格? 例如,我要打印“ Hello”并在其前面加上40个空格。 另外,我要打印的字符串由多行组成。我是否需要分别打印每一行? 编辑:只是要清楚,我希望每行前正好打印40个空格。
114 c  formatting  printf 


5
GDB损坏的堆栈框架-如何调试?
我有以下堆栈跟踪。可以从中得出一些有用的调试信息吗? Program received signal SIGSEGV, Segmentation fault. 0x00000002 in ?? () (gdb) bt #0 0x00000002 in ?? () #1 0x00000001 in ?? () #2 0xbffff284 in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) (gdb) 当获得时,从哪里开始看代码Segmentation fault,而堆栈跟踪不是那么有用? 注意:如果我发布代码,则SO专家会给我答案。我想从SO那里获得指导,自己找到答案,所以我不在这里发布代码。道歉。
113 c  recursion  gdb 

7
C99 stdint.h标头和MS Visual Studio
令我惊讶的是,我刚刚发现MS Visual Studio 2003向上版本中缺少C99 stdint.h。我确定它们是有原因的,但是有人知道我可以在哪里下载副本吗?没有此标头,我将无法定义有用的类型,例如uint32_t等。
113 c++  c  visual-studio  c99 

9
是“ int main;” 有效的C / C ++程序?
我问是因为我的编译器似乎是这样认为的,即使我没有。 echo 'int main;' | cc -x c - -Wall echo 'int main;' | c++ -x c++ - -Wall Clang对此不发出警告或错误,并且gcc仅发出温和的警告:'main' is usually a function [-Wmain],但仅当编译为C时发出。指定a -std=似乎无关紧要。 否则,它将编译和链接正常。但是在执行时,它立即终止SIGBUS(对我来说)。 通读以下内容的(优秀)答案:main()在C和C ++中应该返回什么?以及通过语言规范的快速grep,在我看来,肯定需要一个主要功能。但是gcc -Wmain('main' 通常是一个函数)的废话(以及此处缺少错误)似乎暗示了其他方面。 但为什么?是否有一些奇怪的极端情况或“历史性”用法?有人知道会给什么吗? 我的意思是,我真的认为这在托管环境中应该是一个错误,是吗?
113 c++  c  function  main  entry-point 

7
vmalloc和kmalloc有什么区别?
我到处搜寻,发现大多数人都提倡使用kmalloc,因为可以确保您获得连续的物理内存块。但是,kmalloc如果找不到所需的连续物理块,似乎也可能失败。 拥有连续的内存块有什么好处?具体来说,为什么我需要在系统调用中有一个连续的物理内存块?有什么原因我不能仅仅使用? 最后,如果要在处理系统调用期间分配内存,我应该指定吗?系统调用是否在原子上下文中执行?vmallocGFP_ATOMIC GFP_ATOMIC 分配是高优先级,并且不休眠。这是在中断处理程序,下半部分和其他您无法入睡的情况下使用的标志。 GFP_KERNEL 这是正常分配,可能会阻塞。当可以安全睡眠时,这是在进程上下文代码中使用的标志。

10
free(ptr)其中ptr为NULL会损坏内存吗?
理论上我可以说 free(ptr); free(ptr); 这是内存损坏,因为我们要释放已经释放的内存。 但是如果 free(ptr); ptr=NULL; free(ptr); 由于操作系统将以不确定的方式运行,因此我无法对此进行实际的理论分析。无论我在做什么,这是不是内存损坏? 释放NULL指针是否有效?

9
为什么将未使用的返回值强制转换为无效?
int fn(); void whatever() { (void) fn(); } 是否有任何理由将未使用的返回值转换为空,还是我认为这完全是浪费时间? 跟进: 好吧,这似乎很全面。我想这比注释未使用的返回值要好,因为自我记录代码比注释要好。我个人将关闭这些警告,因为这是不必要的噪音。 如果一个错误因它而逃脱,我会吃我的话。
112 c++  c  void 

3
为什么此代码段错误在64位体系结构上却在32位体系结构上能正常工作?
我遇到了以下C难题: 问:为什么以下程序在IA-64上出现段错误,但在IA-32上却可以正常工作? int main() { int* p; p = (int*)malloc(sizeof(int)); *p = 10; return 0; } 我知道int64位计算机上的大小int可能与指针的大小不同(可能是32位,而指针可能是64位)。但是我不确定这与上面的程序有什么关系。有任何想法吗?

19
#ifdef vs #if-作为启用/禁用特定代码段编译的方法,哪种方法更好/更安全?
这可能是风格问题,但我们的开发团队存在一些分歧,我想知道是否还有其他人对此有任何想法... 基本上,我们有一些调试打印语句,这些语句在正常开发过程中会关闭。我个人更喜欢执行以下操作: //---- SomeSourceFile.cpp ---- #define DEBUG_ENABLED (0) ... SomeFunction() { int someVariable = 5; #if(DEBUG_ENABLED) printf("Debugging: someVariable == %d", someVariable); #endif } 但是,有些团队更喜欢以下内容: // #define DEBUG_ENABLED ... SomeFunction() { int someVariable = 5; #ifdef DEBUG_ENABLED printf("Debugging: someVariable == %d", someVariable); #endif } ...哪种方法对您听起来更好,为什么呢?我的感觉是第一个比较安全,因为总会定义一些东西,并且没有危险可以破坏其他地方的其他定义。

5
Linux中PATH_MAX在哪里定义?
我应该调用哪个头文件#include才能将PATH_MAX用作用于调整字符串大小的int? 我希望能够声明: char *current_path[PATH_MAX]; 但是当我这样做时,我的编译器(Linux上为Clang / LLVM)发出以下错误: recursive_find6.c:29:20: error: use of undeclared identifier 'PATH_MAX' char *current_path[PATH_MAX]; ^ 我试图做一个谷歌搜索,但仍然没有运气。 #include <limits.h> 不能解决问题/错误。 我是否也正确将PATH_MAX的值设置为int?
112 c  linux  gcc  include  clang 



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.