首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

剔除字符串中的空格不借用库函数,自己写了一个可是调试不成功,帮帮忙

2013-07-09 
删除字符串中的空格不借用库函数,自己写了一个可是调试不成功,帮帮忙!我写的这段代码,在调用的函数里面能

删除字符串中的空格不借用库函数,自己写了一个可是调试不成功,帮帮忙!
我写的这段代码,在调用的函数里面能成功打印出来,但是在主函数里面就不行
什么情况,是什么原因?
代码如下:
     


#include <stdio.h>
#include <string.h>
#define LIM 20

char * Del_str (char *str, int n);

int main (void)
{
char str[LIM] = "The C language";
char *p;
int n;
n = strlen (str);
p = Del_str (str, n-1);
puts (p);
return 0;
}

char * Del_str (char *str, int n)
{
char str2[LIM];
char *p = str2;
int i = 0;

for (i = 0; i < n;)
{
if (*str != ' ')
str2[i++] = *str;
*str++;
}
str2[i] = '\0';
//puts (str2);
return p; 
}

在Del_str()里可以 为什么返回的结果不正常?
[解决办法]

#include <stdio.h>
#include <string.h>
#define LIM 20

char * Del_str (char *str, int n);

int main (void)
{
    char str[LIM] = "The C language";
    char *p = new char[LIM];
    int n;
    n = strlen (str);
    p = Del_str (str, n-1);
    puts(p);
    return 0;
}

char* Del_str (char *str, int n)
{
    static char str2[LIM];
static char *p = str2;
    int i = 0;
    
    for (i = 0; i < n;)
    {
        if (*str != ' ')
            str2[i++] = *str;
        *str++;
    }


    str2[i] = '\0';
    puts(str2);
printf("%s\n",p);
puts(p);
    return p; 
}




[解决办法]
char * Del_str (char *str, int n)
{
    char str2[LIM];
    char *p = str2;。。。。。。。。。定义了函数栈里面的变量
    int i = 0;
    
    for (i = 0; i < n)
    {
        if (*str != ' ')
            str2[i++] = *str;
        str++;.......................
    }
    str2[i] = '\0';
//    puts (str2);
    return p; 。。。。。。。此时函数栈已经消失了,所以不能返回函数栈的任何变量。假如定义                            成 static 变量则可以返回的。
}

[解决办法]
str2是局部变量,它的作用域就是你的函数里,出去了就没有啦!所以在函数里可以打印,出去就不行。
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

热点排行