2011-01-27 2 views
0
#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(); 
} 
Эта программа предназначена для того, чтобы отменить слова в строке, которая пытается у меня в течение длительного времени. Я думаю, что логика, которую я написал, является правильной, и каждый раз я получаю разные выходы .. несколько раз вывод предыдущего исполнения будет добавлен в следующий выход. может кто-нибудь сказать мне, где ошибка

c программирование -разработка отдельных слов в строке

несколько раз я получаю правильный вывод с отсутствием одной буквы.

еще одна вещь, я добавляю, когда я печать непосредственно «у как массив он идет, если я пытаюсь дать как указатель это не приходит я имею в виду

Е (»% s», у); // выход и не идет должным образом

для (I = 0; я

я хочу знать точную разницу

+0

Не только код не отформатирован, но даже содержит прокомментированные строки, которые затрудняют чтение. –

+0

Я хотел бы знать, что _why_ образовательные учреждения все еще используют Turbo C ('conio',' clrscr' и 'getch' являются мертвой распродажей), когда вы можете получить gcc бесплатно. Черт, вы даже можете получить MSVC ни за что. – paxdiablo

+0

извините, я ....будет иметь правильный форматированный код со следующего поста – satheesh

ответ

2

Это:

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

- почти наверняка рецепт катастрофы: c - неинициализированный указатель, и вы передаете его strlen. лучший, на который вы можете надеяться, это немедленная свалка ядра.

Вы должны установить, что первым, если только с ляпом:

c = malloc(1000); 

Ther лучшими способами, но, вероятно, уровень мастерства, где вы стремитесь с этим кодом (не пытается быть оскорбительными там, просто заявив, что это CS101-уровень, где, возможно, не нужны расширенные функции ввода пользователем).

+0

Спасибо, что он работает ... – satheesh

1

Проблемы, которые я вижу сразу, это то, что вы не инициализируете свои переменные и не выделяете какую-либо память для строкового буфера.

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

c в этом случае не инициализируется и расчета длины строки он указывает бы привести к непредсказуемому поведению.

Тогда вы

gets(c); 

c должен указывать на некоторый объем памяти, выделяемой либо malloc и друзьями или в массив (например, c[1024]).

y также не инициализирован.

1

Сначала выделите требуемый объем памяти на y. Вы получаете результат от предыдущего выполнения, потому что ранее выделенная память может быть повторно использована. Поэтому освободите память, когда она не понадобится, и выделите ее при необходимости.

Смежные вопросы