最近发现基础很不给力啊,char*遇到的一些问题

      接到任务,以前对于数据库访问是用Qt对postgresql进行操作,所以用到的也是Qt对于数据库操作的类

QSqlDatabase m_db;
if (m_db.open()) {
        qDebug("Database opened success");
} else {
        qCritical() << m_db.lastError().text();
        qFatal("Database opened failed");
}
       看起来倒是很方便啊,问题是现在要暂时先打算如果不用qt呢,于是先把Qt相关的去掉,数据库暂时先还是继续用postgresql吧(果然我只是个技术储备,如同做flex,只是测试道路是否可行,后来改用了html5)

       正题,一搜,其实如下所示,postgresql提供了C/C++的访问接口,虽然库是不同的,pq和pqxx,http://sns.linuxpk.com/blog-63568-17138.html。不过pqxx的参考代码不多,于是用pq库,当然,在eclipse里添加包含和添加lib是必须的了,具体的以后上图。

        下面的任务是对C的这些调用进行封装。遇到第一个蛋疼的问题了,libpq的参考如下:http://www.pgsqldb.org/pgsqldoc-8.1c/libpq.html ,如函数PQsetdbLogin,和函数

PQconnectdb参数都是清一色的const char*,于是类成员也自然就成了char *;

由于需要的参数比如ip,比如端口,比如用户名,比如密码,都是char*,不过连接字符串只是一个char*,居然忘了怎么连接,字符串怎么连接?问个大一的也知道strcat啊,楼主居然忘了,去搜,居然有个用for循环判断一个个拷贝的。当时就疼了。好在问人终于搞定了,特别感谢万能的宰师兄啊。

半成品代码如下:

MyPost::MyPost()
{
	name="sa";
	addr="127.0.0.1" ;
	password="";
}

void MyPost::set(char* uname="sa",
		 char* uaddr="127.0.0.1",
		 char* upass="")
{
	name = uname;
	addr = uaddr;
	password = upass;
}
对于set函数,提供默认参数,以后修改为用户如不修改,好歹有个默认值。

连接字符数组代码如下:

	char uname[N] = "hello";
 	char uaddr[N] = "world";
 	char upass[N] = "fuck";
	
	int len = strlen(uname)+strlen(uaddr)+strlen(upass);
	cout << len << endl;
	char  *dest = new char[len];

	strcpy(dest,uname);
	strcat(dest,uaddr);
	strcat(dest,upass);

注意点:1.定义uname这些为字符数组,而没有用char*,因为需要用户输入,用char*开辟空间什么的,反而不方便,不开辟又会出错

2.len这种动态变化的,得用new开辟,不能直接定义dest[len]

3.第一个要strcpy,后面才能strcat,至于为了识别参数加上空格什么的,就简单了,不说了,过

4.定义的char[],传参时被当做char*处理,指针的好处啊,立现啊,哈哈


丢人啊,字符数组都忘了。。。ps:我ubuntu上的postgresql为毛就新建不了连接呢?明天搞,命名建了sa用户,命名密码对的,就是failed,哎


菜鸟goes on ~~~


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值