C取得字串中的第n个字

时间:2018-10-20 09:32:07

标签: c string pointers

我正在尝试创建一个函数,该函数将返回char数组中的第n个单词,例如,如果字符串为:

posters.html

假设我想获取字符串中的第三个单词,因此它应该返回aaa bbb ccc ddd eee

这是我到目前为止所拥有的:

ccc

当我运行它并给它一个与上面示例中的字符串相似的字符串时,出现了分段错误。所以我想知道我在做错什么,还是有另一种解决方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

char word[new_size];创建一个局部变量,该局部变量在函数返回时被销毁。因此,您可以使用malloc在堆上动态分配内存


#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000
char line[SIZE];
int length_to_space(char *s) {
  char *i = s;
  while (*i != ' ' && *i != '\0') {
    i++;
  }
  return i - s;
}
char *split_space(int index) {
  char *pointer = line;
  int counted = 1;
  while (*pointer != '\0') {
    if (*pointer == ' ') {
      if (counted == index) {
        int new_size = length_to_space(++pointer);
        char *word = malloc(new_size + 1);// dynamically allocate memory 
        for (int i = 0; i < new_size; i++) {
          word[i] = pointer[i];
        }
        word[new_size] = '\0';// char to end of the string '\0'
        return word;// return should be out of the loop
      }
      counted++;
    }
    pointer++;
  }
  return 0;
}

int main() {
  fgets(line, SIZE, stdin);
  char *word = split_space(2);
  printf("%s\n", word);
  free(word);
  return 0;
}


输入:

aaa bbb ccc ddd eee

输出:

ccc