[英]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.