删除字符串中的空格不借用库函数,自己写了一个可是调试不成功,帮帮忙!
我写的这段代码,在调用的函数里面能成功打印出来,但是在主函数里面就不行
什么情况,是什么原因?
代码如下:
#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语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”