内存中的字符串文字是什么? 堆栈/堆?

可能重复: C字符串文字:它们去哪儿了? 我所知道的, 通常,指针必须由malloc()分配,并将分配给堆,然后由free()取消分配; 和 非指针(int,char,float等)将自动分配给堆栈,并且只要函数返回就不会分配 但是,从以下代码: #include int main() { char *a; a = “tesaja”; return 0; } 分配到哪里? 堆栈还是堆?

逗号在C中的while循环中分隔表达式

我以前从未见过这么久的声明。 while(printf(“> “), fgets(str, 100, stdin), !feof(stdin)) { .. .. } 我在网上看到,来自while循环的条件是最右边的[!feof(stdin)]。 然后,使用上面的while语句而不是什么 while(!feof(stdin)) { printf(“> “); fgets(str, 100, stdin); … … } 另外, while语句是一个表达式,1,1是一个有效的表达式吗?

OpenCV:处理每一帧

我想编写一个使用OpenCV进行video捕获的跨平台应用程序。 在所有示例中,我发现使用抓取function处理来自摄像机的帧并等待一段时间。 我想处理序列中的每一帧。 我想定义我自己的回调函数,每当新的框架准备好被处理时,它就会被执行(就像在Windows的directshow中,当您为了这些目的定义和放入图形时你自己的filter)。 所以问题是:我怎么能这样做?

在C中打印数组时奇怪的行为?

我正在尝试打印一个数组但是我没有得到所需的输出,在循环完成打印预定义数组后出现了奇怪的数字。 代码是: #include int main(){ int intArray[11] = {1,2,8,12,-13,-15,20,99,32767,10,31}; int i=0; for(i=0;i<sizeof(intArray);i++){ printf("%d\n",intArray[i]); } } 输出: 1 2 8 12 -13 -15 20 99 32767 10 31 11 1629976468 2674040 2665720 1627423265 1 2665616 -2147417856 1629976534 1629976468 2674040 0 1627423172 1629976532 0 1629110043 0 0 0 0 0 0 0 0 0 0 0 1629976538 […]

C函数调用:理解“隐式int”规则

如果“a function”是单独编译的,那么就不会检测到不匹配,“函数”会返回一个main,它将main视为一个int …根据我们所说的关于声明必须如何匹配定义的内容,这可能会似乎令人惊讶。 可能发生不匹配的原因是如果没有函数原型,则函数通过其在表达式中的第一次出现来隐式声明,例如 sum += “the function”(line); 如果先前未声明的名称出现在表达式中并且后跟左括号,则上下文将其声明为函数名称,假定该函数返回int,并且不假设其参数。 我事先为这个含糊不清的问题道歉,但这意味着什么? 顺便说一下,这是Brian W. Kernighan和Dennis M. Ritchie的C编程语言书第2版第73页第4.3章。

C的strtok()和只读字符串文字

char * strtok(char * s1,const char * s2) 重复调用此函数将字符串s1分解为“标记” – 即字符串被分解为子字符串,每个子字符串以’\ 0’结尾,其中’\ 0’替换字符串s2中包含的任何字符。 第一个调用使用字符串标记为s1; 后续调用使用NULL作为第一个参数。 返回指向当前标记开头的指针; 如果没有更多令牌,则返回NULL。 嗨, 我一直在尝试使用strtok ,并发现如果我将char*传入s1 ,我会遇到分段错误。 如果我传入char[] , strtok工作正常。 为什么是这样? 我google了一下,原因似乎是char*如何只读, char[]是可写的。 将非常感谢更彻底的解释。

C中空结构的大小是多少?

据我说,它是零,但这里似乎有点混乱 我用gcc编译器对它进行了测试,它给出了零作为输出。 我知道在C ++中,空类的大小是1.如果我在这里遗漏任何东西,请告诉我。

必须(应该)避免使用标准库中的哪些function?

我已经读过Stack Overflow,有些C函数是“过时的”或“应该避免”。 能不能给我一些这种function的例子和原因? 这些function有哪些替代方案? 我们可以安全地使用它们 – 任何良好的做法?

C:printf中的ptrdiff_t应该使用哪个字符?

printf ptrdiff_t应该使用哪个字符? C标准是否清楚地解释了如何在printf打印ptrdiff_t ? 我还没找到任何人。 int a = 1; int b = 2; int* pa = &a; int* pb = &b; ptrdiff_t diff = b – a; printf(“diff = %?”, diff); // % what?

初始化时(0.0),0.0f的意义是什么?

我见过人们初始化浮点变量的代码,如下所示: float num = 0.0f; 这与下面的内容之间是否存在显着差异? float num = 0; 谢谢.. :)