我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 关于C中的字符串指针的拷贝 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

jasper





性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 482
威望: 0
浮云: 1140
在线等级:
注册时间: 2005-10-04
最后登陆: 2009-05-07

5come5帮你背单词 [ silicon /'silikən/ n. 硅 ]


关于C中的字符串指针的拷贝

以前用strcpy在字符串指针间拷贝的时候经常出错
数组太不好用了,要显示指定字符串长度。
最近才发现原来是没有对字符串分配内存的原因。

例:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *ch = "hello world";
  char *ch2;
  ch2 = (char *)malloc(strlen(ch));  /* 如果没有显示分配内存,则拷贝将失败 */
  strcpy(ch2, ch);
  printf("%s\n",ch2);
  return 0;
}

不知道以前兄弟们有没有遇到过这种情况,一点小小的经验和大家分享
顶端 Posted: 2007-08-12 15:04 | [楼 主]
carwin





性别: 保密 状态: 该用户目前不在线
等级: 品行端正
发贴: 189
威望: 0
浮云: 1204
在线等级:
注册时间: 2006-09-17
最后登陆: 2014-02-11

5come5帮你背单词 [ promise /'promis/ v. 允诺,答应,有指望,有前途;n. 允诺,诺言,希望,前途 ]


提醒一下!!!!!!!
ch2 = (char *)malloc(strlen(ch));  是错的!!!!!

正确应该为:
ch2 = (char *)malloc(strlen(ch)+1);

否则,你可能在某些情况下遭遇不可预知的错误!!!!
应该多分配一个空间来放'\0’  !!!!!
本帖最近评分记录:
  • 浮云:5(est) 优秀讨论
  • 顶端 Posted: 2007-08-14 00:40 | [1 楼]
    carwin





    性别: 保密 状态: 该用户目前不在线
    等级: 品行端正
    发贴: 189
    威望: 0
    浮云: 1204
    在线等级:
    注册时间: 2006-09-17
    最后登陆: 2014-02-11

    5come5帮你背单词 [ exclaim /iks'kleim/ v. 惊叫,呼喊,大声地说, ]


    在次提醒一下!!
    char *ch = "hello world";

    这种写法不是太好,因为这样的话,ch将指向一个常量字符串。如果下面你有对ch字串的修改的话,将看你的人品啦,极可能会引发访问异常,或不可预知的错误。

    一般这样申明一个字串比较好。
    char ch[]="hello world";
    顶端 Posted: 2007-08-14 00:45 | [2 楼]
    carwin





    性别: 保密 状态: 该用户目前不在线
    等级: 品行端正
    发贴: 189
    威望: 0
    浮云: 1204
    在线等级:
    注册时间: 2006-09-17
    最后登陆: 2014-02-11

    5come5帮你背单词 [ along /ə'loŋ/ prep. 沿着;ad. 向前 ]


    再再次提醒一下!!!!

    ch2 = (char *)malloc(strlen(ch)); 这句之后,一定要加上判断语句

    if(NULL==ch2) exit();

    //当你人品差到极点的时候,malloc是会分配失败,返回NULL的。
    否则,你将可能调试几天,而依然出现不可预知的错误,而令你崩溃的。
    顶端 Posted: 2007-08-14 00:50 | [3 楼]
    我来我网·5come5 Forum » 程序员之家

    Total 0.012337(s) query 6, Time now is:11-23 08:05, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号