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

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

ppdoll



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

5come5帮你背单词 [ acquire /ə'kwaiə/ vt. 获得,取得,学到(知识等),养成(习惯等) ]


大家帮我看看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重新编辑 ]
顶端 Posted: 2007-12-02 15:49 | [楼 主]
ppdoll



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

5come5帮你背单词 [ enable /i'neibl/ vt. 使能够,使可能 ]


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



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

5come5帮你背单词 [ trend /trend/ n. 趋势,倾向;vi. 趋向,倾向 ]


用[ code]  [ /code]把代码括起来……
顶端 Posted: 2007-12-02 16:10 | [2 楼]
ppdoll



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

5come5帮你背单词 [ dense /dens/ a. 密集的,稠密,(烟、雾等)浓密的 ]


好了
顶端 Posted: 2007-12-02 16:12 | [3 楼]
yinx



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

5come5帮你背单词 [ bulb /bΛlb/ n. 球状物,球茎,灯泡 ]


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帮你背单词 [ group /gru:p/ n. 组,群,集团,类型;vt. 集合,配合,把…分类 ]


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



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

5come5帮你背单词 [ create /kri(:)'eit/ n. 奶油,奶油色,乳脂食品,面霜;vt. 提取奶油,涂面霜 ]


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



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

5come5帮你背单词 [ radiator /'reidieitə/ n. 辐射体,散热器/片 ]


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



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

5come5帮你背单词 [ transport /træns'po:t/ vt. 运输,运送 ]


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

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



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

5come5帮你背单词 [ stew /stju:/ v. 炖,煨,焖 ]


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

不对

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



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

5come5帮你背单词 [ retreat /ri'tri:t/ 撤vi. 退,退却;n. 撤退,退却,僻静的地方,休养所 ]


我运行不了楼主的程序……
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帮你背单词 [ mess /mes/ 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帮你背单词 [ steadily /'stedili/ ad. 稳定地 ]


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

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