标题:strcpy的基本问题,请大侠指点
只看楼主
luoyang2404
Rank: 2
等 级:论坛游民
帖 子:19
专家分:27
注 册:2010-11-8
结帖率:100%
已结贴  问题点数: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
帖 子:705
专家分:2043
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-325581-1-1.html




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

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