| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖, 1 人收藏
标题:strcpy的基本问题,请大侠指点
只看楼主 加入收藏
luoyang2404
Rank: 2
等 级:论坛游民
帖 子:19
专家分:27
注 册:2010-11-8
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:4 
strcpy的基本问题,请大侠指点
void getinfo(struct namect *pst)
{
    char temp[81];
    printf("please enter your first name.\n");
    gets(temp);
    pst->fname=(char*)malloc(strlen(temp)+1);
    strcpy(pst->fname,temp);
    printf("please enter your last name.\n");
    gets(temp);
    pst->lname=(char *)malloc(strlen(temp)+1);
    strcpy(pst->lname,temp);
}

我的疑问:1,STRCPY用于字符串复制,那么复制后temp中数据是否全部清空?
          2,如果不清空,那么要是firstname的长度大于lastname,会不会发生溢出?

请高手指点,谢谢
搜索更多相关主题的帖子: strcpy 
2010-11-11 15:17
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:6 
1。赋值了多长,可就清空多长。
2。不会,是整串赋值,长度也跟着改变。

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2010-11-11 17:49
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:6 
不算赋值,而是替代,比如
char temp1[]="";
char temp2[]="hijklmn";
strcpy(temp2,temp1);
之后,temp2[]="abcdefg";
temp1[]不变
如果temp2的长度小于temp1,则出现不可知错误,因为temp2有可能访问别的变量的存储空间。如果大于,没事.
2010-11-12 00:15
韭菜
Rank: 2
等 级:论坛游民
帖 子:51
专家分:94
注 册:2010-9-26
收藏
得分:6 
楼主 你好  能不能共享下你的这个程序的代码  谢谢
我借你的子函数写了一点点,运行没有问题,但是有两个警告   还望哪位大侠帮助我解决掉  先谢谢了
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct namect
{
char fname[82];
char lname[82];
};
void getinfo(struct namect *pst)
{
    char temp[81];
    printf("please enter your first name.\n");
    gets(temp);
    *pst->fname=(char *)malloc(strlen(temp)+1);
    strcpy(pst->fname,temp);
    printf("please enter your last name.\n");
    gets(temp);
    *pst->lname=(char *)malloc(strlen(temp)+1);
    strcpy(pst->lname,temp);
}
void main()
{
struct namect a;
getinfo(&a);
printf("%s  %s \n",a.fname,a.lname);
}
运行平台:vc6.0
运行结果:
please enter your first name.
xiao
please enter your last name.
long
xiao  long
Press any key to continue

2010-11-12 10:17
luoyang2404
Rank: 2
等 级:论坛游民
帖 子:19
专家分:27
注 册:2010-11-8
收藏
得分:0 
源代码如下:
//name3.c--使用指针和malloc()函数
#include<stdio.h>
#include<string.h>  //为了使用strcpy(),strlen()
#include<stdlib.h>  //为了使用malloc(),free()

struct namect{
    char *fname;
    char *lname;
    int letters;
};
void getinfo(struct namect *);
void makeinfo(struct namect*);
void showinfo(const struct namect *);
void cleanup(struct namect *);

int main(void)
{
    struct namect person;
    getinfo(&person);
    makeinfo(&person);
    showinfo(&person);
    cleanup(&person);
    return 0;
}

void getinfo(struct namect *pst)
{
    char temp[81];
    printf("please enter your first name.\n");
    gets(temp);
    pst->fname=(char*)malloc(strlen(temp)+1);
    strcpy(pst->fname,temp);
    printf("please enter your last name.\n");
    gets(temp);
    pst->lname=(char *)malloc(strlen(temp)+1);
    strcpy(pst->lname,temp);
}

void makeinfo(struct namect *pst)
{
    pst->letters=strlen(pst->fname)+strlen(pst->lname);
}

void showinfo(const struct namect *pst)
{
    printf("%s %s,your name contains %d letters.\n",pst->fname,pst->lname,pst->letters);
}

void cleanup(struct namect *pst)
{
    free(pst->fname);
    free(pst->lname);
}
2010-11-12 10:44
快速回复:strcpy的基本问题,请大侠指点
数据加载中...
 
   



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

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