linux中 string类的实现

zjk2752 2013-10-14 02:27:08
最近做XML,各种字符串处理,发现LINUX中只能用字符数组来实现存储字符串真的有很多问题,最突出的就是内存访问安全性不够。比如我定义了一个字符数组 char myString[64],但是经常出现实际赋值的长度大于64,这样在使用像strcpy这类不安全函数数的实现就会出现内存越界,导致各种奇怪的问题发生,并且这种问题不会报错。这样的问题发生之后非常难以排查,往往很难发现,会浪费大量时间,本人已经中招两次了,真纠结。

所以就在思考,可不可以自己参考C++里面的Cstring类自己在linux下面实现一个类似的处理字符串的系列函数,大家有没有什么想法或建议?
最近一段时间,XML比较流行起来了,字符串的处理应该是个趋势啊。
...全文
330 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjk2752 2013-10-14
  • 打赏
  • 举报
回复
哈哈,可能是我错了吧。MFC还是刚毕业那个做过大半年。C++从离开学校就没用过了,一直都是做LINUX下面C在
BT_Dana 2013-10-14
  • 打赏
  • 举报
回复
引用 7 楼 zjk2752 的回复:
[quote=引用 6 楼 aa2650 的回复:] [quote=引用 5 楼 zjk2752 的回复:] [quote=引用 3 楼 aa2650 的回复:] LZ你的专业性也太.... 这么多概念都弄的乱七八糟... 这和是linux还是windows或者其它系统没有关系, 而是单纯的语言问题. c语言里字符串就是用字符数组. 你可以用c++啊, 然后你就可以直接用string类了. 另外cstring不是c++的啊!! 他是MFC里的一个类而已, MFC和c/c++又不是一个东西啊....... 你各种概念怎么都分不清........ 都不知道怎么回复你好了
我知道啊,以前用过C++,所以觉得它那个CSTING类挺不错的啊。只是现在用C处理字符串遇到 一些问题想借监一下[/quote]这是语言特性决定的. 这个是由c语言的特性决定的. c语言的特性第一条就是信任程序员. 你需要自己控制啊 64的数组不够用你就开大点啊, 拷贝会越界你拷之前自己控制下啊, strncpy就是为了保证不越界的啊 不确定大小你可以用malloc啊, 不喜欢malloc你也可以用栈数组啊, 现在c的标准已经支持动态数组大小了 (比如有个字符串char* p = "12345"; 你可以这样啊-->char myString[strlen(p) + 1];然后再拷贝) 另外再重复强调一下, c++里面是string, Cstring是MFC的东西, c++, visual c++, MFC 你都知道是啥东西吗......... 什么是系统 什么是语言 什么是框架 从你描述问题就感觉这些概念你一塌糊涂.....[/quote] 呵呵,没必要那么较真儿啦。MFC是微软框架基础类,类库嘛,也相当于C++的一部分。“c语言的特性第一条就是信任程序员. 你需要自己控制啊”这一句话才是重点啊。[/quote] 没必要较真 我也得不着钱.. 就是替你捉急 有点激动了.. 至于MFC是C++的一部分... 好吧 你又赢了..
zjk2752 2013-10-14
  • 打赏
  • 举报
回复
引用 6 楼 aa2650 的回复:
[quote=引用 5 楼 zjk2752 的回复:] [quote=引用 3 楼 aa2650 的回复:] LZ你的专业性也太.... 这么多概念都弄的乱七八糟... 这和是linux还是windows或者其它系统没有关系, 而是单纯的语言问题. c语言里字符串就是用字符数组. 你可以用c++啊, 然后你就可以直接用string类了. 另外cstring不是c++的啊!! 他是MFC里的一个类而已, MFC和c/c++又不是一个东西啊....... 你各种概念怎么都分不清........ 都不知道怎么回复你好了
我知道啊,以前用过C++,所以觉得它那个CSTING类挺不错的啊。只是现在用C处理字符串遇到 一些问题想借监一下[/quote]这是语言特性决定的. 这个是由c语言的特性决定的. c语言的特性第一条就是信任程序员. 你需要自己控制啊 64的数组不够用你就开大点啊, 拷贝会越界你拷之前自己控制下啊, strncpy就是为了保证不越界的啊 不确定大小你可以用malloc啊, 不喜欢malloc你也可以用栈数组啊, 现在c的标准已经支持动态数组大小了 (比如有个字符串char* p = "12345"; 你可以这样啊-->char myString[strlen(p) + 1];然后再拷贝) 另外再重复强调一下, c++里面是string, Cstring是MFC的东西, c++, visual c++, MFC 你都知道是啥东西吗......... 什么是系统 什么是语言 什么是框架 从你描述问题就感觉这些概念你一塌糊涂.....[/quote] 呵呵,没必要那么较真儿啦。MFC是微软框架基础类,类库嘛,也相当于C++的一部分。“c语言的特性第一条就是信任程序员. 你需要自己控制啊”这一句话才是重点啊。
BT_Dana 2013-10-14
  • 打赏
  • 举报
回复
引用 5 楼 zjk2752 的回复:
[quote=引用 3 楼 aa2650 的回复:] LZ你的专业性也太.... 这么多概念都弄的乱七八糟... 这和是linux还是windows或者其它系统没有关系, 而是单纯的语言问题. c语言里字符串就是用字符数组. 你可以用c++啊, 然后你就可以直接用string类了. 另外cstring不是c++的啊!! 他是MFC里的一个类而已, MFC和c/c++又不是一个东西啊....... 你各种概念怎么都分不清........ 都不知道怎么回复你好了
我知道啊,以前用过C++,所以觉得它那个CSTING类挺不错的啊。只是现在用C处理字符串遇到 一些问题想借监一下[/quote]这是语言特性决定的. 这个是由c语言的特性决定的. c语言的特性第一条就是信任程序员. 你需要自己控制啊 64的数组不够用你就开大点啊, 拷贝会越界你拷之前自己控制下啊, strncpy就是为了保证不越界的啊 不确定大小你可以用malloc啊, 不喜欢malloc你也可以用栈数组啊, 现在c的标准已经支持动态数组大小了 (比如有个字符串char* p = "12345"; 你可以这样啊-->char myString[strlen(p) + 1];然后再拷贝) 另外再重复强调一下, c++里面是string, Cstring是MFC的东西, c++, visual c++, MFC 你都知道是啥东西吗......... 什么是系统 什么是语言 什么是框架 从你描述问题就感觉这些概念你一塌糊涂.....
zjk2752 2013-10-14
  • 打赏
  • 举报
回复
引用 3 楼 aa2650 的回复:
LZ你的专业性也太.... 这么多概念都弄的乱七八糟... 这和是linux还是windows或者其它系统没有关系, 而是单纯的语言问题. c语言里字符串就是用字符数组. 你可以用c++啊, 然后你就可以直接用string类了. 另外cstring不是c++的啊!! 他是MFC里的一个类而已, MFC和c/c++又不是一个东西啊....... 你各种概念怎么都分不清........ 都不知道怎么回复你好了
我知道啊,以前用过C++,所以觉得它那个CSTING类挺不错的啊。只是现在用C处理字符串遇到 一些问题想借监一下
zjk2752 2013-10-14
  • 打赏
  • 举报
回复
引用 1 楼 Idle_Cloud 的回复:
我们也一直在C下使用xml,对于不定长,就用指针啊,用完free就好了。不要用数组。
使用free是不是也要相应的实现一套相应的实现动态增长的函数,有些还是些全局缓冲区,用完还不能free,还必须实现一种对应的增长之后再恢复原状的机制,要不然太费内存。
BT_Dana 2013-10-14
  • 打赏
  • 举报
回复
LZ你的专业性也太.... 这么多概念都弄的乱七八糟... 这和是linux还是windows或者其它系统没有关系, 而是单纯的语言问题. c语言里字符串就是用字符数组. 你可以用c++啊, 然后你就可以直接用string类了. 另外cstring不是c++的啊!! 他是MFC里的一个类而已, MFC和c/c++又不是一个东西啊....... 你各种概念怎么都分不清........ 都不知道怎么回复你好了
zjk2752 2013-10-14
  • 打赏
  • 举报
回复
引用 1 楼 Idle_Cloud 的回复:
我们也一直在C下使用xml,对于不定长,就用指针啊,用完free就好了。不要用数组。
也是一种方法,但是总感觉太经常使用free,会造成内存碎片什么的。并且公司对这个动态内存分配管理的比较严格。不过确实是一种方法
Carl_CCC 2013-10-14
  • 打赏
  • 举报
回复
我们也一直在C下使用xml,对于不定长,就用指针啊,用完free就好了。不要用数组。

23,120

社区成员

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

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