在Linux C开发中,某个数据表中字段的长度设计为n,那么在应用程序中表示这个字段的变量应该定义为多长?

powerwbj 2013-05-09 12:51:59
打个比方:数据表中有一个status字段:状态, 设计表的时候将这个字段设为1,在应用程序中定义了一个status字符数组来存储这个状态值,即: char status[1+1];

那么这个status字符数组的长度为什么是1+1 ? 是因为'\0'的原因吗 ? 谁能说详细一点 ? 谢谢!
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
powerwbj 2013-05-15
  • 打赏
  • 举报
回复
谢谢大家的回复!
布鲁克斯南南 2013-05-13
  • 打赏
  • 举报
回复
引用 5 楼 powerwbj 的回复:
引用 3 楼 yang79tao 的回复:
对于数组(数据库可能不叫数据,叫varchar什么的),如果最大他要N,则数据库中指定为N长,程序中指针为N+1长,即包涵一个\0,这样有很多好处,如果不加\0,很多对于字符串操作的crt函数不能使用,比如strlen等。
弱弱问:不加\0,为什么很多对于字符串操作的crt函数不能使用 ?
char sql[128] ={0}; sprintf(sql,"insert testtable values("%s",2,3)",str); 格式化输出到数组就ok了。 不加\0 是因为很多字符串函数解析的时候 是以字符串\0结束的!!
prohibit 2013-05-13
  • 打赏
  • 举报
回复
引用 4 楼 powerwbj 的回复:
引用 2 楼 prohibit 的回复:
这得看具体的应用场景了,加个'\0'估计为了后面更方便的构造sql语句,比如strcat,strcpy等;要是用sprintf构造sql语句,完全没必要char status[1+1];如果是为了内存对齐,这样写也不是很好;
弱弱问:sprintf构造sql语句,完全没必要char status[1+1], 怎么解释啊 ?
sprintf(buf, "%c", 'A');
powerwbj 2013-05-12
  • 打赏
  • 举报
回复
引用 3 楼 yang79tao 的回复:
对于数组(数据库可能不叫数据,叫varchar什么的),如果最大他要N,则数据库中指定为N长,程序中指针为N+1长,即包涵一个\0,这样有很多好处,如果不加\0,很多对于字符串操作的crt函数不能使用,比如strlen等。
弱弱问:不加\0,为什么很多对于字符串操作的crt函数不能使用 ?
powerwbj 2013-05-12
  • 打赏
  • 举报
回复
引用 2 楼 prohibit 的回复:
这得看具体的应用场景了,加个'\0'估计为了后面更方便的构造sql语句,比如strcat,strcpy等;要是用sprintf构造sql语句,完全没必要char status[1+1];如果是为了内存对齐,这样写也不是很好;
弱弱问:sprintf构造sql语句,完全没必要char status[1+1], 怎么解释啊 ?
youngwolf 2013-05-09
  • 打赏
  • 举报
回复
对于数组(数据库可能不叫数据,叫varchar什么的),如果最大他要N,则数据库中指定为N长,程序中指针为N+1长,即包涵一个\0,这样有很多好处,如果不加\0,很多对于字符串操作的crt函数不能使用,比如strlen等。
prohibit 2013-05-09
  • 打赏
  • 举报
回复
这得看具体的应用场景了,加个'\0'估计为了后面更方便的构造sql语句,比如strcat,strcpy等;要是用sprintf构造sql语句,完全没必要char status[1+1];如果是为了内存对齐,这样写也不是很好;
powerwbj 2013-05-09
  • 打赏
  • 举报
回复
char status[1+1]; 其实就是char status[2];

23,222

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧