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

xiaoliang_c 2011-04-27 07:15:05
我写的这段代码,在调用的函数里面能成功打印出来,但是在主函数里面就不行
什么情况,是什么原因?
代码如下:

#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()里可以 为什么返回的结果不正常?
...全文
252 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
scbzly_4223 2013-06-27
  • 打赏
  • 举报
回复
签名 【前面】
scbzly_4223 2013-06-27
  • 打赏
  • 举报
回复
我想问下,如果这个函数的参数是个靠输入得到的那么这个函数只能得到第一个空格签名的字符串!怎么回事了?
xiaoliang_c 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hnuqinhuan 的回复:]

C/C++ code

#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;……
[/Quote]
讲讲呗,加上这句 char *p = new char[LIM]; 这么神奇
赵4老师 2011-05-06
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
xiaoliang_c 2011-05-06
  • 打赏
  • 举报
回复
指针不是传递的是地址么? 那么主函数里面打印他的地址有什么不同?
AnYidan 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hnuqinhuan 的回复:]
C/C++ code

#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];
……
[/Quote]

++
我真的是琦琦 2011-04-28
  • 打赏
  • 举报
回复

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

void Del_str (char *srcStr, char * objStr,int n);

int main (void)
{
char str[LIM] = "The C language";
char *p;
int n;
n = strlen (str);
p = (char*)malloc((n+1)*sizeof(char));
memset(p,0,sizeof(p));
Del_str(str,p,n-1);
printf("%s",p);
free(p);
return 0;
}

void Del_str (char *srcStr,char* objStr,int n)
{
int i = 0;

for (i = 0; i < n;)
{
if (*srcStr != ' ')
objStr[i++] = *srcStr;
*srcStr++;
}
objStr[i] = '\0';
}

这样作为参数传递进去,直接操作就行了~~~~~
魔笛手 2011-04-27
  • 打赏
  • 举报
回复
str2是局部变量,它的作用域就是你的函数里,出去了就没有啦!所以在函数里可以打印,出去就不行。
qust_sunqiyuan 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 csiyou 的回复:]
C/C++ code
#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 ……
[/Quote]

陈思有 2011-04-27
  • 打赏
  • 举报
回复
#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)
{
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';

return p;
}


正如楼上所说的,你在函数里面定义的变量,当函数调用结束后,内存就释放了
ambition1954 2011-04-27
  • 打赏
  • 举报
回复
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 变量则可以返回的。
}
無_1024 2011-04-27
  • 打赏
  • 举报
回复

#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;
}



無_1024 2011-04-27
  • 打赏
  • 举报
回复
返回局部对象的引用了
c_losed 2011-04-27
  • 打赏
  • 举报
回复
返回是正常的 但是再往下走 内存里的内容就会变化了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧