我正在尝试编写一个函数,该函数将沿空格(' '
)分割字符串而不更改原始字符串,将所有标记放入数组中,然后返回该数组。我遇到的问题是返回指针。下面是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **split_line(char *ln) {
char **tokens, *tok, line[256];
int j;
strcpy(line, ln);
tokens = calloc(64, sizeof(char*));
for (int i = 0; i < 64; i++)
tokens[i] = calloc(64, sizeof(char));
tokens[0] = strtok(line, " ");
for (j = 1; (tok = strtok(NULL, " ")) != NULL && j < 63; j++)
tokens[j] = tok;
tokens[j] = NULL;
return tokens;
}
int main(void) {
char **cut_ln, *input;
input = "Each word in this string should be an element in cut_ln.";
cut_ln = split_line(input);
printf("`%s`\n", input);
for (int i = 0; cut_ln[i] != NULL; i++)
printf("[%d]: `%s`\n", i, cut_ln[i]);
return 0;
}
运行时,将给出:
`This word in this string should be an element in cut_ln.`
[0]: `This`
[1]: `wo1`
[2]: `�={G+s`
[3]: `G+s`
[4]: `string`
[5]: ``
[6]: `0����`
[7]: `��`
[8]: ``
[9]: ``
[10]: ``
当我尝试打印的内容tokens
的split_line
功能,它提供了预期的结果。但是,当tokens
返回并分配给变量,然后打印时,它会如上所示给出上面的结果。我究竟做错了什么?
返回时tokens
,它包含从返回的指针strtok
,这些指针是的指针line
。但目前line
已不存在。
您已分配内存,并使tokens
指向该已分配内存的各种元素指向该内存。不要用从返回的值覆盖这些值strtok
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句