首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++编程-reversing字符串中的单个单词

C++编程-reversing字符串中的单个单词
EN

Stack Overflow用户
提问于 2011-01-27 19:54:20
回答 3查看 4.2K关注 0票数 0
代码语言:javascript
复制
#include<stdio.h>
#include<conio.h>
#include<string.h>
main(){

char *c;
char *y;
int len=strlen(c);
int i,k=0,j,m=0,t;
clrscr();
printf("Enter the string :");
gets(c);
printf("%s",c);
for(i=0;i<=len;i++)
{
    if(c[i]==' '|| c[i]=='\0')
    {
        for(j=i-1;j>=m;j--)
        {
            y[k]=c[j];
            k++;
                        }

                       y[k]=' ';

        m=k;
        k++;

    }

}
y[len]='\0';
for(i=0;i<len;i++)
printf("%c",y[i]);

getch();
}

这个程序是在我尝试了很长时间的字符串中颠倒单词,我认为我写的逻辑是正确的,我每次都得到不同的输出。有时,前一次执行的输出将追加到下一次输出中。有人能告诉我哪里出了错吗?

有些时候,我得到的输出是正确的,只是少了一个字母。

当我直接打印时,我要添加的另一件事是"y作为一个数组,它即将到来,如果我试图将它作为指针,它不会到来

printf("%s",y);//输出不正确

对于(i=0;i

我想知道确切的区别

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-27 19:58:51

这一点:

代码语言:javascript
复制
char *c;
char *y;
int len=strlen(c);

几乎肯定会带来灾难:c是一个未初始化的指针,您正在将其传递给strlen。您所能期望的最好结果就是立即进行核心转储。

你需要先解决这个问题,哪怕只是用杂乱无章的东西:

代码语言:javascript
复制
c = malloc(1000);

还有更好的方法,但可能是你针对代码的技能水平(无意冒犯,只是说明这是CS101级别的东西,可能不需要高级用户输入功能)。

票数 2
EN

Stack Overflow用户

发布于 2011-01-27 20:02:32

我马上看到的问题是,你没有初始化你的变量,也没有为字符串缓冲区分配任何内存。

代码语言:javascript
复制
char *c;
int len=strlen(c);

本例中的c未初始化,计算它所指向的字符串的长度将导致不可预知的行为。

然后你就做了

代码语言:javascript
复制
gets(c);

c应该指向使用malloc和朋友分配的一些内存,或者指向一个数组(比如c[1024])。

y也未初始化。

票数 1
EN

Stack Overflow用户

发布于 2011-01-27 20:03:34

首先,将所需的内存量分配给y。由于先前分配的内存可以重用,因此您将从先前的执行中获得结果。所以在不需要的时候释放内存,在需要的时候分配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4815989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档