我正在尝试创建一个函数,该函数将返回char数组中的第n个单词,例如,如果字符串为:
posters.html
假设我想获取字符串中的第三个单词,因此它应该返回aaa bbb ccc ddd eee
。
这是我到目前为止所拥有的:
ccc
当我运行它并给它一个与上面示例中的字符串相似的字符串时,出现了分段错误。所以我想知道我在做错什么,还是有另一种解决方法。
感谢您的帮助!
答案 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