| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 369 人关注过本帖
标题:求助:复制串中的乱码问题
只看楼主 加入收藏
tane05
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-12-28
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:7 
求助:复制串中的乱码问题
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct

{
    char *data;
    int length;
}SqString;


int StrAssign(SqString *Sq,char *ch);
void Pri_String(SqString *str);
int main()
{
    SqString str,*sq;
    sq=&str;
    printf("%o\n",&str);
    printf("%o\n",sq);
    StrAssign(sq,"Hello!");
    Pri_String(sq);
    return 0;
}
int StrAssign(SqString *Sq,char *ch)
  /*由串常量ch创建串sq

  1.遍历ch求其长度,对应分配Sq空间
  2.复制,Sq长度*/
{
    printf("1\n");
    char *flag=ch;
    int len;

    while(*flag++!='\0')
        continue;
    len=flag-ch;
    Sq->data=(char *)malloc((len+1)*sizeof(char));
    printf("2\n");
    if(Sq->data==NULL)
    {
        printf("Apply space is not succesed!");
        exit(0);
    }
    while(*(Sq->data)++=*ch++)
        ;
    Sq->length=len;
    printf("3\n");
    return 0;
}
void Pri_String(SqString *str)
{
    for(int i=0;i<str->length;i++)
        putchar(*str->data++);
    printf("\n");
    printf("%s\n",str->data);
    printf("%d\n",str->length);
}



2011-06-09 23:49
tane05
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-12-28
收藏
得分:0 
本来想写个串基本操作的代码,串常量ch创建串sq这函数纠结了,看过来看过去,就找不到乱码的原因,再次求高手解释下,真想找个师傅,忽忽..
2011-06-09 23:51
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:2 
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct
{
    char *data;
    int length;
}SqString;


int StrAssign(SqString *Sq,char *ch);
void Pri_String(SqString *str);

int main()
{
    SqString str,*sq;
    sq=&str;

    printf("%o\n",&str);
    printf("%o\n",sq);

    StrAssign(sq,"Hello!");

    Pri_String(sq);

    return 0;
}

int StrAssign(SqString *Sq,char *ch)
  /*由串常量ch创建串sq

  1.遍历ch求其长度,对应分配Sq空间
  2.复制,Sq长度*/
{
   // printf("1\n");
    char *flag=ch;
    int len;

    while(*flag++!='\0')
        continue;
    len=flag-ch;
    Sq->data=(char *)malloc((len+1)*sizeof(char));
    //printf("2\n");
    if(Sq->data==NULL)
    {
        printf("Apply space is not succesed!");
        exit(0);
    }
    while(*(Sq->data)++=*ch++);

    Sq->data = Sq->data - len;

    Sq->length=len;
    //printf("3\n");

    return 0;
}
void Pri_String(SqString *str)
{
    for(int i=0;i<str->length;i++)
        putchar(*str->data++);

    str->data = str->data - str->length;

    printf("\n");
    printf("%s\n",str->data);
    printf("%d\n",str->length);
}

2011-06-10 00:08
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:3 
程序代码:
int StrAssign(SqString *Sq,char *ch)
{
    printf("1\n");
    char *flag=ch;
    int len;

    while(*flag!='\0') {
        flag++;                    // 照之前那样写这里得到的 len 会比字符串长度多 1 。 因为当 *flag == '\0' 是 flag 会再自增 1 。
    }
    len=flag-ch;
    Sq->data=(char *)malloc((len + 1)*sizeof(char));
    printf("2\n");
    if(Sq->data==NULL)
    {
        printf("Apply space is not succesed!");
        exit(0);
    }
    flag = Sq->data;               // 不要随便修改 Sq->data 的值。
    while(*flag++ = *ch++);
    Sq->length=len;
    printf("3\n");
    return 0;
}
void Pri_String(SqString *str)
{
    int i;
    for(i=0;i<str->length;i++)
        putchar(*(str->data + i)); // 同上
    printf("\n");
    printf("%s\n",str->data);
    printf("%d\n",str->length);
}


ps:希望楼主注意代码格式和变量命名。flag 这个名字就用的不好

[ 本帖最后由 voidx 于 2011-6-10 00:19 编辑 ]
2011-06-10 00:14
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
感谢楼上两位大神 小弟学习了

                                         
===========深入<----------------->浅出============
2011-06-10 09:06
tane05
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-12-28
收藏
得分:0 
回复 4楼 voidx
十分感谢 新手
2011-06-10 09:18
tane05
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-12-28
收藏
得分:0 
回复 3楼 寒风中的细雨
感谢 感谢
2011-06-10 09:19
tane05
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-12-28
收藏
得分:0 
谢谢俩位 明白了 自己修改了串的基地
2011-06-10 09:28
快速回复:求助:复制串中的乱码问题
数据加载中...
 
   



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

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