| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1107 人关注过本帖
标题:c程序单步调试都正确,但是最后出来的结果不正确
只看楼主 加入收藏
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
结帖率:100%
收藏
 问题点数:0 回复次数:8 
c程序单步调试都正确,但是最后出来的结果不正确
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int getStr(char* source, char* buf1, char* buf2) {

    /*
     * 有一个字符串”1a2b3d4z”,;
     要求写一个函数实现如下功能,
     功能1:把偶数位字符挑选出来,组成一个字符串1。
     功能2:把奇数位字符挑选出来,组成一个字符串2。
     功能3:把字符串1和字符串2,通过函数参数,传送给main,并打印。
     功能4:主函数能测试通过。
     *
     */

    char* mySour = source;
    char myBuf1[] = { 0 };//存放奇数位的字符串
    buf1 = myBuf1;
    char myBuf2[] = { 0 };//存放偶数位的字符串
    buf2 = myBuf2;

    int result = 0;
    //程序健壮性判断
    if(source == NULL || buf1==NULL||buf2==NULL){
        printf("source == NULL || buf1==NULL||buf2==NULL");
        result = -1;
        return result;
    }else{
        int len = strlen(mySour);//获取源字符串长度
        int i = 0;
        int j = 0;
        while(*mySour!='\0'){

            *buf1 = *mySour;
            //printf("==%c\n",*buf1);
            myBuf1[i] = *buf1;
            printf("myBuf1[i]=%c\n",myBuf1[i]);
            buf1++;
            i++;
            mySour++;

            *buf2 = *mySour;
            //printf("=-=%c\n",*buf2);
            myBuf2[i-1] = *buf2;
            printf("myBuf2[i-1]=%c\n",myBuf2[i-1]);
            buf2++;
            i++;
            mySour++;
        }
        *buf1 = '\0';
        *buf2 = '\0';
        buf1 = myBuf1;
        buf2 = myBuf2;
        printf("buf1=%s\n",buf1);//输出结果不正确(但是为什么printf("myBuf1[i]=%c\n",myBuf1[i]);这儿是输出结果是正确的)
        printf("buf2=%s\n",buf2);//输出结果正确

    }
    return result;
}

void test_getStr(){

    char buf[20] = "1a2b3d4z";
    char* pb = buf;
    char odd[]= {0};
    char even[]= {0};
    char* myOdd = odd;
    char* myEven = even;

    int result = getStr(pb,myOdd,myEven);
    if(result==-1){
        printf("失败");
    }
    //printf("奇数位字符串是:%s\n",myOdd);
    //printf("偶数位字符串是:%s\n",myEven);

}



运行结果如下:
myBuf1[i]=1
myBuf2[i-1]=a
myBuf1[i]=2
myBuf2[i-1]=b
myBuf1[i]=3
myBuf2[i-1]=d
myBuf1[i]=4
myBuf2[i-1]=z
buf1=bdz//无论是打印这个指针字符串还是打印输出myBuf1数组都不正确,但是依据运行结果是正确的啊,单步调试的时候运行到buf2++;myBuf1数组的值突然发生变化
buf2=abdz

[ 本帖最后由 轉身已陌路 于 2015-8-21 20:17 编辑 ]
搜索更多相关主题的帖子: c程序 字符串 
2015-08-21 15:57
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
char myBuf1[] = { 0 };
   
 char myBuf2[] = { 0 };
这两句是什么意思
2015-08-21 19:50
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
回复 2楼 jklqwe111
用来存放筛选出来的字符串啊
2015-08-21 20:07
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
回复 2楼 jklqwe111
我又分别用gcc和vc分别编译了,
gcc编译没有问题,运行不会出现运行时异常,但是运行的结果不是我想要的,
vc(vs2013)编译没问题,运行时出现运行异常,但是运行结果是我想要的。
还有,在看见程序中这句变量int j = 0;在gcc下把这个定义的变量删掉,运行时会出错,但是我下面并没有用到这句变量啊
但是在vc下把这句变量删掉就没问题,真是千奇百怪,匪夷所思

[ 本帖最后由 轉身已陌路 于 2015-8-21 20:18 编辑 ]
2015-08-21 20:12
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
用来存放筛选出来的字符串啊
这是你的目的,但是char myBuf1[] = { 0 };这个代码能完成任务吗,先不要调试了,再看看数组的知识吧。
2015-08-21 20:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
一起手就錯,怎麼可能對。

授人以渔,不授人以鱼。
2015-08-21 21:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
/*
* 有一个字符串”1a2b3d4z”,;
要求写一个函数实现如下功能,
功能1:把偶数位字符挑选出来,组成一个字符串1。
功能2:把奇数位字符挑选出来,组成一个字符串2。
功能3:把字符串1和字符串2,通过函数参数,传送给main,并打印。
功能4:主函数能测试通过。
*
*/

#include <stdio.h>
#include <conio.h>

const int MAX_LENGTH = 256;

void fun(const char* str, char* s1, char* s2)
{
    int counter = 0;

    while (*str != '\0')
    {
        ++counter;
        if (counter % 2 != 0)
        {
            *s1++ = *str;
        }
        else
        {
            *s2++ = *str;
        }
        ++str;
    }
    *s1 = '\0';
    *s2 = '\0';
}

int main(void)
{
    const char* str = "1a2b3d4z";
    char s1[MAX_LENGTH], s2[MAX_LENGTH];

    printf_s("str: %s\n", str);
    fun(str, s1, s2);
    printf_s("s1: %s\n", s1);
    printf_s("s2: %s\n", s2);

    printf_s("\nPress any key to continue...");
    _getch();
    return 0;
}

授人以渔,不授人以鱼。
2015-08-21 22:30
gold615
Rank: 2
等 级:论坛游民
帖 子:54
专家分:75
注 册:2014-6-7
收藏
得分:0 
你没有限制第一个子程序中两个局部数组的大小阿,按照初始化的情况看,这两个空间的大小均为1.
2015-08-22 09:45
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
以下是引用gold615在2015-8-22 09:45:17的发言:

你没有限制第一个子程序中两个局部数组的大小阿,按照初始化的情况看,这两个空间的大小均为1.

是的,已经修改了,谢谢
2015-08-26 17:42
快速回复:c程序单步调试都正确,但是最后出来的结果不正确
数据加载中...
 
   



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

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