2012-11-09 6 views
-1

다음 코드를 사용하여 문장 (문자열)을 읽고 문장의 단어를 표시하려고합니다. 그것은해야대로 표시되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?C에서 문자열 배열로 작업

#include <stdio.h> 
#include <string.h> 
#define N 100 

int main() 
{ 
    char s[N]; 
    char words[N][N]; 
    int i=0; 
    int j=0; 
    printf("s="); 
    gets(s); 
    while ((i<strlen(s)) && (s[i]!='.')) 
    { 
     while (s[i]!= ' ') 
     { 
      sprintf(words[j],"%c", s[i]); 
      i++; 
     } 
     j++; i++; 
    } 
    for (i=0;i<j;i++) printf("%s ", words[i]); 
    return 0; 
} 
+2

는 일반적으로 우리는 이러한 경우에 디버거를 사용 ... – pmod

+1

은 우리가 무엇이 잘못되었는지 추측하지 마십시오. 입력, 예상 출력 및 실제 출력을 설명하십시오. –

+1

'sprintf (words [j], "% c", s [i])'는 단어 [j] [0] = s [i]보다 많지도 작지도 않음을 의미합니다. words [j] [1] = 0'. 각 단어의 첫 번째 위치가 아닌 다른 곳을 지정하지 않습니다. –

답변

0

while 루프 논리가 잘못되었습니다. 그것은해야 다음 printf() 호출이 실패합니다 있도록

int k = 0; 
while (s[i] != ' ') 
    words[j][k++] = s[i++]; 
words[j][k] = '\0'; 

또한, 당신은 words[]에 종료 널 문자 ('\0')을 작성하지 않습니다.

+0

그가''sprintf()'를 사용하고''sprintf()''함수가 문자열 버퍼를 (' '\ 0' ')으로 끝내기 때문에 종료 널 문자 (''\ 0'') – MOHAMED

0

테스트하지만 당신은 아이디어를 얻을해야하지 :

int size = strlen(s); 
int start = 0; 
for(i = 0; i < size; i++) { 
    if (s[i] == ' ') { 
     char* word = malloc((i-start)*size(char)+1); // alloc memory for a word 
     strcpy(word, s+size(char)*i, i-start); // copy only the selected word 
     word[i-start+1] = '\0'; // add '\0' at the end of string 
     printf("%s\n", word); 
     start = i + 1; // set new start index value 
    } 
} 
0
#include <stdio.h> 
#include <string.h> 
#define N 100 

int main() 
{ 
    char s[N]; 
    char words[N][N] = {0} ; /* this initial your array to 0 */ 
    int i=0; 
    int j=0; 
    printf("s="); 
    gets(s); 
    while ((i<strlen(s)) && (s[i]!='.')) 
    { 
     while (s[i]!= ' ') 
     { 
      sprintf(words[j]+strlen(words[j]),"%c", s[i]); /* this will concat chars in words[j] */ 
      i++; 
     } 
     j++; i++; 
    } 
    for (i=0;i<j;i++) printf("%s ", words[i]); 
    return 0; 
}