| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 456 人关注过本帖
标题:关于 strcpy 的问题,描述不清楚问题,直接看代码吧。
只看楼主 加入收藏
cwlmyjm
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2014-11-2
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
关于 strcpy 的问题,描述不清楚问题,直接看代码吧。
这是出现在我的作业里面的一个小片段,因为作业很长就把我主要困惑的截图截出来了。目的是从words.dat(一个类似于字典的东西,里面有很多很多单词)里面读取出一个单词,因为fgets读出来的str1最后有个‘\0’,所以我用strncpy将fgets‘\0’前的拷贝到另外一个str2里面,但是str2厘米又出现了奇怪的东西。。。但是用memset清0后好像又正常了,不知道这样子的原因,求大神解释。
程序代码:
#include<stdio.h>
#include<string.h>
int main(void)
{
    FILE *dictionary;
    dictionary = fopen("words.dat","r");
    char str1[20],str2[20];
    fgets(str1,20,dictionary);
    int m,n;
    m=strlen(str1);
    n=strlen(str2);
    printf("m=%d\nn=%d\n",m,n);
    printf("str1=%s\nstr2=%s\n",str1,str2);
    memset(str2,0,20);
    strncpy(str2,str1,10);
    m=strlen(str1);
    n=strlen(str2);
    printf("m=%d\nn=%d\n",m,n);
    printf("str1=%s\nstr2=%s\n",str1,str2);
}
搜索更多相关主题的帖子: color 单词 
2014-11-02 14:37
cwlmyjm
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2014-11-2
收藏
得分:0 
求大神解释一下不用memset多话str2第十个字符后面的乱码时哪里来的呢???
2014-11-04 11:33
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
收藏
得分:10 
memset()一般用于对字符型变量的初值进行赋值,你之前就没有初始化str2,所以第一次输出str2肯定会出现乱码,用来memset后,就相当于把它初始化,而且你把前20个都置为0了,所以你把str1的前10个给它,但第11个为0,并作为字符串结束标志,所以第二次输出就会正确。
2014-11-04 13:09
hnz2014
Rank: 2
等 级:论坛游民
帖 子:3
专家分:30
注 册:2014-11-4
收藏
得分:10 
写代码的坏习惯,数据不初始化:n=strlen(str2); printf("str1=%s\nstr2=%s\n",str1,str2); 这些有啥意义?
2014-11-04 15:02
快速回复:关于 strcpy 的问题,描述不清楚问题,直接看代码吧。
数据加载中...
 
   



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

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