#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;我
我想知道确切的区别
答案 0 :(得分:2)
此:
char *c;
char *y;
int len=strlen(c);
几乎是一个灾难的秘诀:c
是一个未初始化的指针,你将它传递给strlen
。您可以希望的 best 是一个直接的核心转储。
如果仅使用kludge:
,首先需要解决这个问题c = malloc(1000);
Ther是更好的方法,但可能是你瞄准该代码的技能水平(不是试图在那里进攻,只是声明这是CS101级别的东西,可能不需要高级用户输入功能)。
答案 1 :(得分:1)
我马上看到的问题是你没有初始化变量而没有为字符串缓冲区分配任何内存。
char *c;
int len=strlen(c);
在这种情况下, c
未初始化,并且计算它指向的字符串的长度会导致不可预测的行为。
然后你做
gets(c);
c
应指向分配了malloc
和朋友或数组(如c[1024]
)的内存。
y
也未初始化。
答案 2 :(得分:1)
首先将所需的内存量分配给y。您将从之前的执行中获得结果,因为之前分配的内存可以重用。因此,在不需要时释放内存并在需要时分配。