在c中搜索字符串的子字符串,然后从中生成新字符串

在c中搜索字符串的子字符串,然后从中生成新字符串,c,string,c-strings,C,String,C Strings,C并不能让这变得容易。我到处找,什么也没找到 我需要在C字符串中搜索以“Sample:”开头的子字符串,然后创建一个新的C字符串,该字符串由该字符串之后的所有字符组成,直到第一个换行符 在C++中,我可以在心跳的时候这样做。一个更有经验的C程序员能给我指路吗 我相信我可以通过手写来实现这一点,但肯定有一些内置函数可以提供帮助?作为您的朋友,请记住在完成后释放输出: const char *input = "Hello Sample: This is a test\nTest"; const c

C并不能让这变得容易。我到处找,什么也没找到

我需要在C字符串中搜索以“Sample:”开头的子字符串,然后创建一个新的C字符串,该字符串由该字符串之后的所有字符组成,直到第一个换行符

在C++中,我可以在心跳的时候这样做。一个更有经验的C程序员能给我指路吗

我相信我可以通过手写来实现这一点,但肯定有一些内置函数可以提供帮助?

作为您的朋友,请记住在完成后释放输出:

const char *input = "Hello Sample: This is a test\nTest";

const char *start = strstr(input, "Sample: ");

if (!start)
{
    // report error here
}

const char *end = strstr(start, "\n");
if (!end)
{
    // you have two options here. 
    // #1: use pure strdup on start and you have your output
    // #2: make this an error, and report it to the user.
}


int length = end - start;

char *output = strndup(start, length);

printf("%s", output); // Prints "Sample: This is a test"

free(output);

如果你知道正确的API调用就不难了。

查找strstr(),也许还有strchr()。顺便说一句:我可以建议你彻底研究std库中的函数。函数不多,但当你需要它们时,你可能会记得它们的名字。为什么我得到了-1?出于好奇…对我来说似乎是一个合理的问题,可能是因为你抱怨并且没有表现出任何努力。不确定应该表现出什么努力,因为问题的重点是学习使用内置C函数,但是谢谢。我不知道你可以减去字符。太棒了。这就是我要找的东西。谢谢。@Aerovistae这与字符串如何作为连续的内存块存储在内存中有关。因此,如果我有一个指向内存索引a的指针,那么该指针和内存块开头之间的区别就是子字符串的长度。@Aerovistae:如果搜索“指针算术”一词,您将找到许多解释和示例。只是别忘了检查对
strstr()的两个调用是否返回空值
然后做适当的事情。@Richard:你在检查
!启动
有点晚(如果为NULL,则不能在
strstr()
调用中使用它)。