请大家帮小弟我看一下,小弟我写的函数如何会死循环呢,自己实在找不出原因了,
请大家帮我看一下,我写的函数怎么会死循环呢,自己实在找不出原因了,急.
//-----------------------------------
#include <clx.h>
#pragma hdrstop
#include <iostream.h>
//------------------------------------函数qq要求:它从一特定位置开始扫描一字符串,返回所遇到的第一个词,即第一个不含空格的连续的字符序列,如字符串 "what is your name? "中就包含了4个词.
但是我下面写的这个程序,不知道怎么搞的死循环什么也输出不出来,请大家看看.
char *qq(char *c)
{
while(*c== ' ')
c++;
char * temp_c= "a ";
while(*c && *c != ' ')
{
*(temp_c)=*c;
temp_c++;
c++;
}
*temp_c= '\0 ';
return temp_c;
}
#pragma argsused
int main(int argc, char* argv[])
{
char s[]= "what is your name? ",*ps=s;
do
cout < <qq(ps) < <endl;
while(*ps);
cin.get();
return 0;
}
------解决方案--------------------
因为char word[81];是在栈中开辟的空间,它在进入char *qq(char *c)时被初始化,在从qq中返回时就无效了,所以即使你使用return word;返回这个数组的首地址,在调用cout时,这块地址的内容就被修改了。
把char word[81];换成char *word = new char[81];就行了
不过要记得在cout之后释放,否则会造成内存泄漏。
//-----------------------------------
#include <clx.h>
#pragma hdrstop
#include <iostream.h>
//------------------------------------函数qq要求:它从一特定位置开始扫描一字符串,返回所遇到的第一个词,即第一个不含空格的连续的字符序列,如字符串 "what is your name? "中就包含了4个词.
但是我下面写的这个程序,不知道怎么搞的死循环什么也输出不出来,请大家看看.
char *qq(char *c)
{
while(*c== ' ')
c++;
char * temp_c= "a ";
while(*c && *c != ' ')
{
*(temp_c)=*c;
temp_c++;
c++;
}
*temp_c= '\0 ';
return temp_c;
}
#pragma argsused
int main(int argc, char* argv[])
{
char s[]= "what is your name? ",*ps=s;
do
cout < <qq(ps) < <endl;
while(*ps);
cin.get();
return 0;
}
------解决方案--------------------
因为char word[81];是在栈中开辟的空间,它在进入char *qq(char *c)时被初始化,在从qq中返回时就无效了,所以即使你使用return word;返回这个数组的首地址,在调用cout时,这块地址的内容就被修改了。
把char word[81];换成char *word = new char[81];就行了
不过要记得在cout之后释放,否则会造成内存泄漏。