《C、C++学习编程》由会员分享,可在线阅读,更多相关《C、C++学习编程(284页珍藏版)》请在金锄头文库上搜索。
1、C/C+编程问答编程问答1.C/C+编程编程1.1: 我有问题,怎样发问,怎样查找答案我有问题,怎样发问,怎样查找答案 A 许多问题可以通过 GOOGLE 查找答案,GOOGLE 网址是,上面的资料都很具体。另外在论坛的精华区也有不少讨论,许多可以直接解决你的问题,建议问前先在 GOOGLE 查找,并看看精华区。 如果已找了 GOOGLE 并看了精华区,但是对某些方面不理解,那么就在论坛上发问。发问时标题要清楚,并把你的问题描述清楚。许多人不会看你帖子的内容,所以在标题中写清楚问题也是很重要的。 如果要粘贴代码,那么使用发言功能中的 CODE 功能,这样可以保证代码不会乱,能有更多人看懂你代码
2、。 当别人准确回答了你的问题时,应该说声谢谢,表示这个问题已回答,并当别人准确回答了你的问题时,应该说声谢谢,表示这个问题已回答,并表示对帮助你的人的感谢。这样会让更多的人觉得你的一个好学有礼貌的人,表示对帮助你的人的感谢。这样会让更多的人觉得你的一个好学有礼貌的人,从而会更注意你的问题。从而会更注意你的问题。 如果你按上面这些方法做了,并不能保证你的发言一定能回答,因为不是每个人什么问题都知道,但可以保证会有更多人关注你的问题,回答的可能性会更高。 1.2:STL string 怎么转换大小写怎么转换大小写 A:使用 STL 算法中的 transform 函数 代码代码:string str
3、22 = “This IS a MiXed CaSE stRINg“; transform (str22.begin(),str22.end(), str22.begin(), tolower); 1.3: 怎样生成动态库怎样生成动态库 A:创建步骤: 首先创建 object 文件,这个文件将加入通过 gcc fPIC 参数命令加入到共享函数库里面。PIC 的意思是“位置无关代码”(Position Independent Code)。下面是一个标准的格式: 代码代码:gcc -shared -Wl,-soname,your_soname -o library_name file_list l
4、ibrary_list 下面再给一个例子,它创建两个 object 文件(a.o 和 b.o),然后创建一个包含 a.o 和 b.o 的共享函数库。例子中”-g”和“Wall”参数不是必须的。 代码代码:gcc -fPIC -g -c -Wall a.c gcc -fPIC -g -c -Wall b.c gcc -shared -Wl,-soname,liblusterstuff.so.1 -o liblusterstuff.so.1.0.1 a.o b.o -lc 下面是一些需要注意的地方: 不用使用-fomit-frame-pointer 这个编译参数除非你不得不这样。虽然使用了这个参数
5、获得的函数库仍然可以使用,但是这使得调试程序几乎没有用,无法跟踪调试。 使用-fPIC 来产生代码。 使用 shared 说明生成动态库,使用 soname说明生成的库名 某些情况下,使用 gcc 来生成 object 文件,需要使用“-Wl,-export-dynamic”这个选项参数。通常,动态函数库的符号表里面包含了这些动态的对象的符号。这个选项在创建 ELF 格式的文件时候,会将所有的符号加入到动态符号表中。可以参考 ld 的帮助获得更详细的说明。 star3s 补充: 对于 C+程序要使用 EXTERN “C”说明输出接口 代码代码:extern “C“ int soTest(int
6、 a,int b) ; int soTest(int a,int b) return a+b; 1.4:怎样指定程序链接某个库的动态库或静态库版本:怎样指定程序链接某个库的动态库或静态库版本 A:使用 Bdynamic 和-Bstatic 选项。默认情况下,假如共享库可用,连接器会使用共享库。但是-Bdynamic 和-Bstatic 提供了很好控制库的方法。它们可以决定用共享库还是用静态库。 传-Bdynamic 和-Bstatic 选项给连接器,如下操作: # gcc -o main main.o -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar # gcc -
7、o main main.o -Wl,-Bstatic 告诉连接器所有的库(象 libc 等等)都使用静态的版本。 1.5: 请问各请问各 UNIX 平台下和编译器名平台下和编译器名 kaisakaisa : sun CC (c+) cc(c) alpha cxx(c+) cc(c) HP aCC(c+) IBM xlC (c+) 1.6: solaris 下有没有下有没有 C 函数可以获得进程的相关信息函数可以获得进程的相关信息 比如:进程名、进程 pid、进程所占 CPU/Memory、开始时间、运行状态等等。谢谢。 liupch:2003-03-19 10:03 读取/proc/进程号/p
8、sinfo 这个文件。 就用我告诉你的那个函数 ioctl(fd, PIOCPSINFO, 在看一下 procinfo 这个结构就知道了。 1.7: c+下使用下使用的问题的问题 在 c+下使用 include 后为什么编译器会报错呢 1.检查你是不是使用 g+编译器编译。gcc 编 c+程序会有问题 2.检查在 include 头文件后有没有使用 using namespace std; 新的标准 C+加了几个关键字,其中最常用的就是 namespace(名字空间) 加入这个关键字是为了避免在大程序中符号名重定义问题 同时原来的标准 c+类都包含在 std 名字空间中(如果使用 c+ 的标准
9、函数库,如 那么它们也在 std 名字空间中) 新的标准 c+头文件没有 .h,所以当你们 include 它们时要注意使用 std名字空间. 以下一个例子 代码代码:#nclude #include using namespace std; /在 include 所有标准 c+头文件后 main() coutoerr ora 1013 CHUJUN_98: sqlca 中含有中文含义 sqlca.sqlerrm.sqlerrmc 代表的是 sqlCZHI 行的结果描述 2.3: AIX 下编译的嵌入式下编译的嵌入式 DB2 C 程序程序,删除数据库后再删除数据库后再创建时连接不成功创建时连接
10、不成功 预编译:embprep proc 得到 proc.bnd 和 proc.c 文件,编译没有错误发生。 编译:xlc -o proc proc.c -ldb2 编译正确,生成执行文件 proc。 执行 proc 一切正常。 因为涉及到可能的移植问题,于是测试将数据库 Emp Drop 掉(db2 drop database Emp),再重新建原来相同的数据库 Emp 和表 info,建成后执行proc,程序可正常连接数据库,可在对表 info 操作时(如 select)返回SQLCODE 错误=-805,也就是说无法对表进行操作。重新编译该程序后,运行正常! AIX 下的 DB2 数据库
11、不太好用,它在编译时会产生一个 PKG 存放于数据库中, 并且会对它打上时间戳。如果从新建库获建表的话都会破坏时间戳,必须从新编译或 rebind,以产生新的 PKG。 hasjing:2003-03-17 12:55 AIX 下的 DB2 数据库不太好用,它在编译时会产生一个 PKG 存放于数据库中, 并且会对它打上时间戳。如果从新建库获建表的话都会破坏时间戳,必须从新编译或 rebind,以产生新的 PKG。 时间戳的目的是为了保证 db2 数据库优化策略的一致性,而且 PKG 的内部名称 是 SQC 文件的前八个字母,所以在开发时要当心每个模块的名字前八个字母不能相同!否则会产生 PKG
12、 覆盖,会产生 818 的错误代码! 所以 IBM 的东西虽好,但是规矩太多! 在 db2 环境下 ? SQL0805 可以查看错误代码! 2.4: 请问请问 SOLARIS 下使用下使用 OCI 编程序要连什么库编程序要连什么库 在 Solaris8 下安装了 oracle8.1.6,并编译用 OCI 编写的程序,其中使用了很多的 oci 函数,包括 Direct Path API,但联接时,提示OCIDirPathColArrayReset等符号找不到 编译时已加入了-L/export/home/opt/oracle/8.1.6/lib -lclntsh 如果将 Direct Path 的
13、调用去掉,则连接成功,请各位高手不吝赐教 wangz :2003-03-20 加上-lclient8 就可以了!试试看,我这里可以 2.5:请问怎样用请问怎样用 ct-librery 编程编程 有哪位熟悉 ct-library 编程,我在写有关 socket 通讯的程序,需要和sybase 数据库交互信息。希望和高手切磋一下! minsanyuan :2003-04-21 22:55 调 CT-Library 就可以了,那来的 socket 呀, 如果用 socket 就不要用 ct-Library 了, 如果你很牛,可以试试两都都用 1. 初始化 ct-library ct_init( .)
14、 2. 分配连接结构 ct_con_alloc(.) 3. 设置用户名及口令 ct_con_props(.) 4. 建立连接 ct_connect(.) 5. 断开连接 ct_exit( . ) 6. 释放 ct_ctx_drop(.) /Sybase/sample 下有例子 3 GTK+ 编程编程 以下由付强提供,QQ:775341 ,感谢他把自己的学习成果写出来与大家分享 原作者声明如下 这些文章其实是我的学习笔记,以 FAQ 方式代问自答,希 望能帮初学者解决一点实际问题。 您可以随意修改或转载本文,但请保证内容的正确性,以 免误人子弟 - 谢谢 :) 3.1 问:论坛中有人说问:论坛中
15、有人说 GTK+ 并不支持中文,是这样并不支持中文,是这样吗?吗? - 答: GTK+ 采用 UTF-8 编码就是为了支持多字节文字,所以 GTK+ 肯定支持中文,而且非常出色,你可以看到网上使用 GTK+ 编写 的中文软件数不胜数,所以没必要理会那种说法。 ( 我真的看过这类的帖子,误人子弟.呵呵. ) 3.2 问:为什么在控件上的汉字无法显示,并伴有如下问:为什么在控件上的汉字无法显示,并伴有如下错误警告:错误警告: “* (:1864): WARNING *: Invalid UTF8 string passed to pango_layout_set_text()“ - 答: GTK+ 中的字符串均采用 UTF-8 格式编码,这个提示就是告 诉您,程序中的字符串编码格式不是 UTF-8,通常这是由编辑器 造成的,例如在我的 VC7 中,默认的存档编码格式为 GB2312。 但是,除了将文件以 UTF-8 编码格式存档外,你还可以使用 glib 的转换函数在程序的运行过程中将字符串转换为 UTF-8。 例如: 将 button = gtk_button_new_with_label( “确定“ ); 改成 button = gtk_button_ne