#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
我想知道确切的区别
发布于 2011-01-27 19:58:51
这一点:
char *c;
char *y;
int len=strlen(c);几乎肯定会带来灾难:c是一个未初始化的指针,您正在将其传递给strlen。您所能期望的最好结果就是立即进行核心转储。
你需要先解决这个问题,哪怕只是用杂乱无章的东西:
c = malloc(1000);还有更好的方法,但可能是你针对代码的技能水平(无意冒犯,只是说明这是CS101级别的东西,可能不需要高级用户输入功能)。
发布于 2011-01-27 20:02:32
我马上看到的问题是,你没有初始化你的变量,也没有为字符串缓冲区分配任何内存。
char *c;
int len=strlen(c);本例中的c未初始化,计算它所指向的字符串的长度将导致不可预知的行为。
然后你就做了
gets(c);c应该指向使用malloc和朋友分配的一些内存,或者指向一个数组(比如c[1024])。
y也未初始化。
发布于 2011-01-27 20:03:34
首先,将所需的内存量分配给y。由于先前分配的内存可以重用,因此您将从先前的执行中获得结果。所以在不需要的时候释放内存,在需要的时候分配。
https://stackoverflow.com/questions/4815989
复制相似问题