2014-09-25 19 views
1

我有一個最多200個字符的字符數組。我想爲數組中的每個單詞指定一個數組。我有這張照片作爲應該發生的事例。 I am not allowed to post images so here is a link to the picture on imgur將字符數組中的指針指定給字符串中的每個字C

我試着循環查找空格的字符串,爲每個事件分配一個新的指針。但是,它每次都打印剩餘的字符串,然後崩潰。

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char str[200]; 
    char *arr[200]; 
    fgets(str, 200, stdin); 
    arr[1] = &str[5]; 
    printf("%s", arr[1]); 
    int i = 0; 
    int next = 0; 
    char ch = ' '; 
    for (; i < 200; i++) { 
     ch = str[i]; 
     if (ch == ' '){ 
      arr[next] = &str[i]; 
      next++; 
     } 
    } 
    i = 0; 
    for (; i < 200; i++) { 
     printf("%s", arr[i]); 
    } 
    return 0; 
} 
+4

發佈您的代碼。 – 2014-09-25 22:02:26

+1

此外,它看起來像'strtok'可能在這種情況下有用。 – dreamlax 2014-09-25 22:02:43

+1

我們無法處理我們看不到的代碼。 – 2014-09-25 22:04:36

回答

0

要修復的示例。

#include <stdio.h> 

int main() { 
    char str[200]; 
    char *arr[sizeof(str)/2];//Enough if half 
    fgets(str, sizeof(str), stdin); 
    int i, j; 
    char ch = ' '; 
    for (j = i = 0; str[i] && str[i] != '\n'; i++) {//i < 200 is over run. 
     if(ch == ' ' && str[i] != ' ') 
      arr[j++] = &str[i]; 
     ch = str[i]; 
    } 
    for (i = 0; i < j; i++) {//i < 200 is over run. 
     printf("%s", arr[i]); 
    } 
    return 0; 
} 

#include <stdio.h> 
#include <string.h> 

int main() { 
    char str[200]; 
    char *arr[sizeof(str)/2]; 
    fgets(str, sizeof(str), stdin); 
    int i, j=0; 
    char *word = strtok(str, " \t\n"); 
    while(word){ 
     arr[j++] = word; 
     word = strtok(NULL, " \t\n"); 
    } 
    for (i = 0; i < j; i++) { 
     printf("%s\n", arr[i]); 
    } 
    return 0; 
} 
+0

謝謝你,我認爲我的代碼可以工作,但我試圖達到的目的是讓它逐字逐句打印,而不是在每個空格之後打印字符串的其餘部分。 – TheMethodMan 2014-09-25 22:51:46

+0

@TheMethodMan需要在單詞後面更改爲'\ 0'以不打印剩餘字符。 'strtok'在已經指出的這些過程中很有用。 – BLUEPIXY 2014-09-25 22:58:02

+0

@TheMethodMan我通過strtok添加樣本。 – BLUEPIXY 2014-09-25 23:02:39

0

如果你在你的內容少於200個空格,輸出迴路會搶一個指向隨機地址,將arr [i]和其供應給printf ...這可能會導致您的崩潰。

0

你有兩個選擇:

1)如果字符串是modifyable可以將每個單詞後 '\ 0' 更改第一個空格字符。這將讓您使用存儲的指針進行打印,但原始字符串將不再正確打印。

2)將字符串和指針的長度存儲在一個結構中,並且有一個自定義函數可以爲你打印它們。

+0

看來斯托克做了#1 – James 2014-09-25 23:24:34