| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 936 人关注过本帖
标题:请教关于字符串问题!
只看楼主 加入收藏
lxsbupt
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-11-23
收藏
 问题点数:0 回复次数:10 
请教关于字符串问题!
#include "stdio.h"
#include "assert.h"
#include "stdlib.h"
#include "string.h"
char *stringCopy(char *strDestination,const char *strSaurce)
{
 char *p=strDestination;
 assert(strDestination!=NULL&&strSaurce!=NULL);
 while( *strSaurce!= '\0' )
  *p++ = *strSaurce++;
 *p=' ';
 return p;
}
void main()
{
 char strDest[10],strSaur[]="hello!";
 printf("%d\n%d\n",strlen(strSaur),strlen(strDest));
 stringCopy(strDest,strSaur);
 printf("%s\n",strDest);
 printf("%d,%d\n",sizeof(strDest),strlen(strDest));
 system("pause");
}

6
15
hello! 烫烫汤?
10,15
请按任意键继续. . .
为什么strDest的长度是15啊?
调用函数stringCopy函数后,输出strDest时后面为什么有乱码啊?
搜索更多相关主题的帖子: 字符 
2007-11-23 20:20
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
你的strDest长度为10,而只有7个元素被复制,后面三个是编译器填充的随机值,但是你打印的时候10个数组元素都打印了,后面的3个元素打印出乱码!

樱花大战,  有爱.
2007-11-23 20:59
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
'\0'啊'\0'

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-11-23 21:03
thecorr
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-6-12
收藏
得分:0 
char *stringCopy(char *strDestination,const char *strSaurce)
{
char *p=strDestination;
assert(strDestination!=NULL&&strSaurce!=NULL);
while( *strSaurce!= '\0' )
  *p++ = *strSaurce++;
*p=' '; // 改成*p = '\0'
return p;
}
2007-11-23 21:17
flyaway57
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-3-28
收藏
得分:0 
strlen(strDest))这个的问题是因为没有给strDest初值,所以返回的是一个随机值.
以上是个人理解,希望高手指正
给LZ个建议
不要用*p++,.而用*strDestination,因为你要返回P,如果想用p的话,那就返回strDestination
你的这个char *stringCopy(char *strDestination,const char *strSaurce)函数执行完以后,返回的是一个指向不知道那里的指针
2007-11-24 02:17
yangyang321
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-11-25
收藏
得分:0 
这样如何?
char *stringCopy(char *strDestination,const char *strSaurce)
{
    assert(strDestination!=NULL&&strSaurce!=NULL);
    strncpy(strDestination,*strSaurce,sizeof(*strSaurce));
    if(n > 0)
        strDestination[n-1] = '\0';
}
2007-11-25 14:52
yangyang321
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-11-25
收藏
得分:0 
写错了
小改一下
有错误请指正哦呵呵
char *stringCopy(char *strDestination,const char *strSaurce)
{
    int n = sizeof(*strSaurce);
    assert(strDestination!=NULL&&strSaurce!=NULL);
    strncpy(strDestination,strSaurce,n);
    if(n > 0)
        strDestination[n-1] = '\0';
}

[[italic] 本帖最后由 yangyang321 于 2007-11-25 14:57 编辑 [/italic]]
2007-11-25 14:53
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
char *stringCopy(char *strDestination,const char *strSaurce)
{
char *p=strDestination;
assert(strDestination!=NULL&&strSaurce!=NULL);
while( *strSaurce!= '\0' )
  *p++ = *strSaurce++;
*p=' ';       /* 应该是 '\0' */
return p;
}

—>〉Sun〈<—
2007-11-25 14:59
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
const char *strSaurce  这样定义了```

还可以这样吗?  strSaurce++;  好像不可以直接这样改变吧``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-11-25 15:01
flyaway57
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-3-28
收藏
得分:0 
int n = sizeof(*strSaurce);
你试试这句等于多少?你会发现它怎么一直是个定值呢?然后就去查一查sizeof的用法
2007-11-27 00:18
快速回复:请教关于字符串问题!
数据加载中...
 
   



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

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