用const char指针分配的内存在哪里?

可能重复: 是在静态内存中创建的c ++中的字符串文字吗? C ++字符串文字数据类型存储 在这段代码中: const char * str = “hello world”; 如果我理解正确,指针是4或8个字节,我想这将在堆栈上分配。 但分配和存储“hello world”的内存在哪里? 或者str指向什么?

为什么winpcap需要运行.lib和.dll?

规格可以在这里看到: http://www.winpcap.org/docs/docs_40_2/html/group__wpcapsamps.html 这很奇怪, .lib或.dll足够IMO,为什么它需要两者?

如何在C中设置运行时字符集?

如何在Linux环境下用C编程语言设置运行时字符集? 例如,我想将其设置为iso8859-1,utf-8或ascii。

POSIX对C中指针类型的限制

背景 POSIX标准为C语言添加了许多库函数和其他标识符。 在dlsym()函数的描述中,它说(我强调): 概要 #include void *dlsym(void *restrict handle, const char *restrict name); 描述 dlsym ()函数应获取符号的地址( 函数标识符或数据对象标识符)… C标准不保证函数指针可以转换为void * ,甚至不能保证指针的大小相同。 这有效地增加了对C类型系统的额外限制。 题 我的问题是: 对于C类型系统的这种限制是否存在规范性参考,或者它是否只能从某些库函数的描述中推导出来? POSIX甚至可以在sizeof ( function pointer ) > sizeof (void *)吗? 参考 C11标准(最终公开草案): n1570 The Open Group的POSIX标准: POSIX.1-2008 POSIX dlsym()函数

跟踪未初始化的静态变量

我需要调试一个丑陋而庞大的数学C库,可能是由f2c生成的。 代码滥用本地静态变量,不幸的是它在某处似乎利用了这些自动初始化为0的事实。如果使用相同的输入两次调用其入口函数,则它会给出不同的结果。 如果我卸载库并重新加载它,它可以正常工作。 它需要很快,所以我想摆脱加载/卸载。 我的问题是如何使用valgrind或任何其他工具发现这些错误,而无需手动遍历整个代码。 我正在寻找声明本地静态变量的地方,先读取,然后再写。 由于静态变量有时会通过指针进一步传递(是的 – 它太丑了),这个问题更加复杂了。 我理解人们可以争辩说,自动工具不应该检测到这样的错误,因为在某些情况下,这正是预期的行为。 还有,有没有办法让自动初始化的本地静态变量“脏”?

如何编译基本的D-Bus / glib示例?

我正在尝试学习如何使用带有C绑定的D-Bus。 我以前从未使用过D-Bus。 我正在学习本教程 ,我认为这是官方教程 (Freedesktop.org)。 我已经读过它,直到这个段落给出了第一个示例程序,但不幸的是我在这个页面上没有看到任何关于如何编译它或包含哪些库的指示。 我错过了什么 ? 我的操作系统是Ubuntu 10.04 32bit。 我安装了libdbus-glib-1-dev软件包。 我尝试在源文件的开头添加#include ,并使用 $ gcc -ldbus-1 -I/usr/include/dbus-1.0/ -I/usr/lib/i386-linux-gnu/dbus-1.0/include -o my_dbus.bin my_dbus.c 但我一直都在失败: my_dbus.c: In function ‘main’: my_dbus.c:7:3: error: unknown type name ‘DBusGConnection’ my_dbus.c:8:3: error: unknown type name ‘GError’ … 我是否错过了教程中的一点? 不,你能帮我编译一下这段代码吗? 提前致谢。

这个’ – >’在c / objective-c中意味着什么?

我正在查看一些代码,我遇到了一些我不知道其含义的语法。 ‘ – >’是什么意思? -(void) getTransformValues:(struct transformValues_*) tv { tv->pos = positionInPixels_; tv->scale.x = scaleX_; tv->scale.y = scaleY_; tv->rotation = rotation_; tv->skew.x = skewX_; tv->skew.y = skewY_; tv->ap = anchorPointInPixels_; tv->visible = visible_; }

基本的C编程

我正在尝试编写一个程序,它给出一定数量的输入将输出所列输入的乘积(只有0-9的会计输入而忽略其他输入)。 例如:输入:345将导致输出:60,或另一个示例,输入:3t4和输出:12 我已经做了很多次尝试,这就是我所坚持的: #include main(){ int c,i; c = getchar(); i = 1; while (c!= ‘\n’){ if (c>=48 && c<=57){ i=c*i; c=getchar(); } } printf("%d",i); }

返回指向局部变量的指针

我不知道为什么会这样。 由于x是局部变量,我以为在尝试返回时会出错。 然而,第一个printf工作正常,但它只是打印出来0.任何人都可以解释这里发生了什么? #include int* func1() { int x = 123123; int *y = &x; return y; } int main() { int* c = func1(); printf(“%d\n”, *c); // output: 123123 printf(“%d\n”, *c); // output: 0 return 0; }

如何在GCC中指定枚举大小?

我想为枚举指定64位的枚举大小。 这怎么可能通过海湾合作委员会? 代码不需要是“可移植的”,因为我只对将代码用于x86-32和x86-64 Linux的GCC编译感兴趣。 这意味着任何可以提供我想要的function的黑客都可以,只要它适用于那些目标。 鉴于此代码: #include #include enum some_enum { garbage1, garbage2 }; int main(void) { enum some_enum some_val; printf(“size: %lu\n”, sizeof(some_val)); return EXIT_SUCCESS; } 这当前打印出4,而我希望能够强制大小为8.尝试在枚举赋值中指定大于4个字节的值会导致警告。 例如, enum some_enum { garbage1 = ‘12345’, garbage2 }; 会产生: warning: character constant too long for its type [enabled by default] 这里对类似问题的回答似乎没有产生任何好结果。 也就是说,由于以下原因产生了相同的警告: enum some_enum { garbage1 = […]