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

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

ppdoll



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

5come5帮你背单词 [ anxiety /æŋg'zaiəti/ n. 焦虑,挂念,担心,渴望,热望 ]


大家帮我看看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帮你背单词 [ abide /ə'baid/ vi. (by)遵守、坚持 ]


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



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

5come5帮你背单词 [ wherever /w/ər'evə/ conj. 无论在(到)哪里;ad. 无论(去)什么地方,究竟在(到)哪里 ]


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



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

5come5帮你背单词 [ burn /bə:n/ v. 燃烧,烧毁,烧伤;n. 烧伤,灼伤 ]


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



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

5come5帮你背单词 [ freeze /fri:z/ vt. 使结冰,冻结(存款、工资、物价等) ]


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帮你背单词 [ plot /plot/ n. 情节,阴谋,小块土地;vt. 密谋,策划,标出;vi. 密谋,策划 ]


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



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

5come5帮你背单词 [ cord /ko:d/ n. 细绳,弦 ]


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



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

5come5帮你背单词 [ reflection/-exion // n. 映象,倒影,反射,沉思,熟虑 ]


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



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

5come5帮你背单词 [ tone /təun/ n. 音色,音调,语调,色调,气氛,调子 ]


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帮你背单词 [ crocodile // n. 鳄鱼 ]


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帮你背单词 [ works // 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帮你背单词 [ cling /kliŋ/ vi. 缠住,粘住,依恋,依靠,坚信,坚持 ]


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帮你背单词 [ lie /lai/ vi. 躺,平放,位于,在于 ]


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

    Total 0.026851(s) query 5, Time now is:12-23 01:05, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号