| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 288 人关注过本帖
标题:使用动态存储分配来创建字符串的副本。运行的结果不对!
只看楼主 加入收藏
as25210
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2010-6-27
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
使用动态存储分配来创建字符串的副本。运行的结果不对!
代码


程序代码:
//编写名为duplicate的函数,此函数使用动态存储分配来创建字符串的副本

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *my_malloc(int n);
char *duplicate(const char* str);

int main(void)
{
  char *str = my_malloc(1 * sizeof(char));        
  gets(str);
  
  char *p ;
  p = duplicate(str);
  if(p == NULL)
  {
    printf("Error:duplicate failed in concat\n");
    exit(EXIT_FAILURE);        
  }
  putchar('\n');

 // printf("p = %d\n",strlen(p));
  puts(p);
  
  return 0;
}

char *my_malloc(int n)
{
  char *p = malloc(n);
  if(p == NULL)
  {
    printf("Error:malloc failed in concat\n");
    exit(EXIT_FAILURE);
  }
  return p;
}

char* duplicate(const char* str)
{
  int n = strlen(str);
  char *p = malloc(sizeof(char) * n + 1);
  
  if(p == NULL)        //分配内存失败返回空指针
    return NULL;
  
  strcpy(p,str);
  
  return p;
}


为什么运行的结果每次都复制在第十三的字符就结束。
111111111111111111111111111111111111
111111111111111111111111111111111111
111111111111111111111111111111111111

p = 13
1111111111111
搜索更多相关主题的帖子: 字符串 动态 存储 
2012-10-22 21:56
as25210
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2010-6-27
收藏
得分:0 
2012-10-22 22:01
hgand
Rank: 2
等 级:论坛游民
帖 子:32
专家分:77
注 册:2012-10-17
收藏
得分:7 
关注!
2012-10-23 10:05
快速回复:使用动态存储分配来创建字符串的副本。运行的结果不对!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015514 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved