我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 大家帮我看看c的问题 隐藏签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

ppdoll



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 140
威望: 0
浮云: 1219
在线等级:
注册时间: 2007-09-13
最后登陆: 2008-06-24

5come5帮你背单词 [ level /'levl/ n. 水平面,水平线,等级,水平;a. 平的,水平的 ]


大家帮我看看c的问题

Copy code
#include "stdio.h"


typedef struct
{
    char ch[40];
    int len;
}SString;

void StrInsert(SString *s,int pos,SString *t)
{
    int i;
    if(pos<0||pos>s->len)
    printf("pos is err\n");
    if(s->len+t->len<=40)
    {
    for(i=s->len-1;i>=pos;i--)
   
    s->ch[i+t->len]= s->ch[i];
    for(i=pos;i<t->len+pos;i++)
    s->ch[i]=t->ch[i-pos];
    s->len=s->len+t->len;
    }
    else
    printf("insert is err\n");
}

void InitStr(SString *s)
{
    int i=0;
    char k[40];
    scanf("%s",k);
    for(i;k[i]!=0;i++)
    s->ch[i]=k[i];   
    s->len=i;
   
}


void main()
{
void StrInsert(SString *s,int pos,SString *t);
void InitStr(SString *s);

SString *a,*t;
InitStr(a);
InitStr(t);
StrInsert(a,2,t);
printf("%s\n%d",a->ch,a->len);

}

为什么结果有时候对,有时候不对呢?
比如我
a.jpg


[ 此帖被ljpdxj在2007-12-02 17:17重新编辑 ]
爱dota,爱生活
顶端 Posted: 2007-12-02 15:49 | [楼 主]
ppdoll



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 140
威望: 0
浮云: 1219
在线等级:
注册时间: 2007-09-13
最后登陆: 2008-06-24

5come5帮你背单词 [ control /kən'trəul/ vt. 控制,抑制,支配 ]


后面两个符号是怎么出来的啊?
爱dota,爱生活
顶端 Posted: 2007-12-02 15:50 | [1 楼]
yinx



性别: 帅哥 状态: 该用户目前不在线
等级: 人见人爱
家族: 丢丢
发贴: 2333
威望: 0
浮云: 1260
在线等级:
注册时间: 2006-09-15
最后登陆: 2009-05-11

5come5帮你背单词 [ mercury /'mə:kjuri/ n. 水银(柱),汞,水星 ]


用[ code]  [ /code]把代码括起来……

自强不息!
顶端 Posted: 2007-12-02 16:10 | [2 楼]
ppdoll



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 140
威望: 0
浮云: 1219
在线等级:
注册时间: 2007-09-13
最后登陆: 2008-06-24

5come5帮你背单词 [ hay /hei/ n. 干草 ]


好了
爱dota,爱生活
顶端 Posted: 2007-12-02 16:12 | [3 楼]
yinx



性别: 帅哥 状态: 该用户目前不在线
等级: 人见人爱
家族: 丢丢
发贴: 2333
威望: 0
浮云: 1260
在线等级:
注册时间: 2006-09-15
最后登陆: 2009-05-11

5come5帮你背单词 [ outdoors /'aut'do:z/ a. 在户外,在野外 ]


Copy code
    for(i=s->len-1;i>=pos;i--)   
    s->ch[i+t->len]= s->ch[i];/*这个地方的怎么加不上去啊。。。


这里,忘了把S串的最后那个0x0加到新串上,所以新S串在应该结束的地方没有结束。
把for改成这样:
Copy code
    for(i=s->len;i>=pos;i--)   

自强不息!
顶端 Posted: 2007-12-02 16:14 | [4 楼]
ppdoll



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 140
威望: 0
浮云: 1219
在线等级:
注册时间: 2007-09-13
最后登陆: 2008-06-24

5come5帮你背单词 [ ointment /'ointmənt/ n. 软膏,药膏 ]


改后还有问题
远程图片:b.jpg
爱dota,爱生活
顶端 Posted: 2007-12-02 16:21 | [5 楼]
ppdoll



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 140
威望: 0
浮云: 1219
在线等级:
注册时间: 2007-09-13
最后登陆: 2008-06-24

5come5帮你背单词 [ edge /ed3ə/ n. 边,边缘,刀口,刃 ]


改后只是出问题的长度有7,8,变为了9,10
爱dota,爱生活
顶端 Posted: 2007-12-02 16:24 | [6 楼]
ppdoll



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 140
威望: 0
浮云: 1219
在线等级:
注册时间: 2007-09-13
最后登陆: 2008-06-24

5come5帮你背单词 [ governor /'gΛvənə/ n. 统治者,(组织、机构等)主管人员 ]


按我的理解最后那个0x0应该是在我为字符数组赋值结束后自动加上去,不知道理解对不对
爱dota,爱生活
顶端 Posted: 2007-12-02 16:38 | [7 楼]
luwen



性别: 帅哥 状态: 该用户目前不在线
头衔: 无我相
等级: 人见人爱
发贴: 4372
威望: 0
浮云: 1120
在线等级:
注册时间: 2006-09-14
最后登陆: 2013-09-25

5come5帮你背单词 [ eat /i:t/ v. 吃 ]


Quote:
引用第7楼ppdoll于2007-12-02 16:38发表的  :
按我的理解最后那个0x0应该是在我为字符数组赋值结束后自动加上去,不知道理解对不对

不对
收购KK
飞翔在无边的黑夜里
感受着那份悲凉与寂寞
只为寻找那已遗失的记忆
也许只是心中的幻影
却可能是我的宿命

顶端 Posted: 2007-12-02 16:43 | [8 楼]
ppdoll



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 140
威望: 0
浮云: 1219
在线等级:
注册时间: 2007-09-13
最后登陆: 2008-06-24

5come5帮你背单词 [ bump /bΛmp/ n. & vt. 撞,碰撞 ]


Quote:
引用第8楼luwen于2007-12-02 16:43发表的  :

不对

那难道只是初始化字符数组时,才自动加
爱dota,爱生活
顶端 Posted: 2007-12-02 16:48 | [9 楼]
yinx



性别: 帅哥 状态: 该用户目前不在线
等级: 人见人爱
家族: 丢丢
发贴: 2333
威望: 0
浮云: 1260
在线等级:
注册时间: 2006-09-15
最后登陆: 2009-05-11

5come5帮你背单词 [ total /'təutl/ a. 总的,全部的;n. 总数,总计;vt. 计算…的总和;vi. 总计,合计 ]


我运行不了楼主的程序……
Copy code
InitStr()里给s->ch[i]赋值之前没有先为s分配空间……

自强不息!
顶端 Posted: 2007-12-02 19:56 | [10 楼]
hhbhhb



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 292
威望: 0
浮云: 1105
在线等级:
注册时间: 2006-09-21
最后登陆: 2009-03-16

5come5帮你背单词 [ life /laif/ n. 生命,性命,生物,寿命,一生,生活,生存 ]


Copy code
#include<stdio.h>
#include<string.h>

typedef struct {
    char ch[40];
    int len;
}SString;

void StrInsert(SString *s, int pos, SString *t) {
    int i;
    if(pos<0||pos>s->len) { printf("pos is err\n"); return; }
    if(s->len+t->len>=40) { printf("insert is err\n"); return; }

    for(i=s->len-1;i>=0;i--) s->ch[i+t->len]=s->ch[i];
    for(i=pos;i<t->len+pos;i++) s->ch[i]=t->ch[i-pos];
    s->len+=t->len;
    s->ch[s->len]=0;
}

void InitStr(SString *s) {
    scanf("%s", &s->ch);
    s->len = strlen(s->ch);
}

void main() {
    SString a, t;
    InitStr(&a);
    InitStr(&t);
    StrInsert(&a, 2, &t);
    printf("%s\n%d", a.ch, a.len);
}
本帖最近评分记录:
  • 浮云:5(zhd32) 好人
  • 顶端 Posted: 2007-12-02 21:07 | [11 楼]
    ppdoll



    性别: 帅哥 状态: 该用户目前不在线
    等级: 品行端正
    发贴: 140
    威望: 0
    浮云: 1219
    在线等级:
    注册时间: 2007-09-13
    最后登陆: 2008-06-24

    5come5帮你背单词 [ finger /'fiŋgə/ n. 手指 ]


    谢谢了
    爱dota,爱生活
    顶端 Posted: 2007-12-02 23:30 | [12 楼]
    我来我网·5come5 Forum » 程序员之家

    Total 0.013555(s) query 5, Time now is:11-22 22:17, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号