繁体   English   中英

c编程-反转字符串中的单个单词

[英]c programming -reversing individual words in a string

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

我想知道确切的区别

这个:

char *c;
char *y;
int len=strlen(c);

是几乎可以肯定的灾难配方: c是未初始化的指针,您将其传递给strlen 您可以期望的最好是立即进行核心转储。

如果仅使用kudge,则需要先解决此问题:

c = malloc(1000);

这是更好的方法,但是可能是您针对该代码的技能级别(不要在那儿发脾气,只是说这是CS101级别的东西,可能不需要高级用户输入功能)。

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

char *c;
int len=strlen(c);

在这种情况下, c不会被初始化,并且计算它指向的字符串的长度将导致不可预测的行为。

那你做

gets(c);

c应该指向通过malloc和friends分配的某些内存,或者指向数组(例如c[1024] )。

y也未初始化。

首先将所需的内存量分配给y。 您正在从先前的执行中获取结果,因为先前分配的内存可以重复使用。 因此,在不需要时释放内存,并在需要时分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM