2014-09-25 18 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