如何从某个字符后的字符串中提取子字符串?

时间:2019-02-14 19:05:34

标签: c substring

我正在尝试实现重定向。我有用户的输入,我正在尝试从中提取输出文件。我正在使用strstr()查找“>”的首次出现。从那里我可以提取字符串的其余部分,但是我不确定如何做到这一点。

我尝试将strstr()与strcpy()一起使用,但是没有运气。

// char_position is the pointer to the character '>'
// output_file is the file that I need to extract
// line is the original string

// example of input: ls -l > test.txt

char *chr_position = strstr(line, ">");
char *output_file = (char *) malloc(sizeof(char) * (strlen(line) + 1));
strcpy(output_file + (chr_position - line), chr_position // something here?);
printf("The file is %s\n", output_file);

期望的结果是从>直到行的末尾构建一个字符串。

2 个答案:

答案 0 :(得分:0)

执行此操作时:

strcpy(output_file + (chr_position - line), chr_position);

您不是从头开始复制到output_file,而是在此后{strong>个字节复制到chr_position - line字节。从头开始:

strcpy(output_file, chr_position + 1);

还请注意,由于chr_position指向>字符,因此您要在此之后至少复制1个字节。

答案 1 :(得分:0)

您可以很容易地使用strstr完成此操作:

char inarg[] = "ls -l > test.txt";

char  *pos;
pos = strstr(inarg, "> ") + 2;
printf("%s\n", pos);   // Will print out 'test.txt'

这通过在字符串中查找“>”组合而起作用。 strstr调用后的+2是为了让strstr返回指向字符串'> test.txt'的指针,并且我们想跳过'>'(带有尾随空格的2个字节),因此我们将2加到指针,使其最终指向我们希望提取的文本。